diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 3d77ab14a2..85d3640bcc 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -71,6 +71,7 @@ "INVENTREE_DB_NAME": "/workspaces/InvenTree/dev/database.sqlite3", "INVENTREE_MEDIA_ROOT": "/workspaces/InvenTree/dev/media", "INVENTREE_STATIC_ROOT": "/workspaces/InvenTree/dev/static", + "INVENTREE_BACKUP_DIR": "/workspaces/InvenTree/dev/backup", "INVENTREE_CONFIG_FILE": "/workspaces/InvenTree/dev/config.yaml", "INVENTREE_SECRET_KEY_FILE": "/workspaces/InvenTree/dev/secret_key.txt", "INVENTREE_PLUGIN_DIR": "/workspaces/InvenTree/dev/plugins", diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e87a705e10..2371f411a9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,3 +4,9 @@ # plugins are co-owned /InvenTree/plugin/ @SchrodingersGat @matmair /InvenTree/plugins/ @SchrodingersGat @matmair + +# Installer functions +.pkgr.yml @matmair +Procfile @matmair +runtime.txt @matmair +/contrib/ @matmair diff --git a/.github/actions/setup/action.yaml b/.github/actions/setup/action.yaml index 62f1331b0f..339fb9399c 100644 --- a/.github/actions/setup/action.yaml +++ b/.github/actions/setup/action.yaml @@ -35,12 +35,12 @@ runs: using: 'composite' steps: - name: Checkout Code - uses: actions/checkout@v2 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 # Python installs - name: Set up Python ${{ env.python_version }} if: ${{ inputs.python == 'true' }} - uses: actions/setup-python@v2 + uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # pin@v4.3.0 with: python-version: ${{ env.python_version }} cache: pip @@ -58,7 +58,7 @@ runs: # NPM installs - name: Install node.js ${{ env.node_version }} if: ${{ inputs.npm == 'true' }} - uses: actions/setup-node@v2 + uses: actions/setup-node@969bd2663942d722d85b6a8626225850c2f7be4b # pin to v3.5.0 with: node-version: ${{ env.node_version }} cache: 'npm' diff --git a/.github/workflows/check_translations.yaml b/.github/workflows/check_translations.yaml index e4f318948c..910ecdda9b 100644 --- a/.github/workflows/check_translations.yaml +++ b/.github/workflows/check_translations.yaml @@ -20,10 +20,11 @@ jobs: INVENTREE_DEBUG: info INVENTREE_MEDIA_ROOT: ./media INVENTREE_STATIC_ROOT: ./static + INVENTREE_BACKUP_DIR: ./backup steps: - name: Checkout Code - uses: actions/checkout@7884fcad6b5d53d10323aee724dc68d8b9096a2e # pin@v2 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Install Dependencies run: | sudo apt-get update diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index a8442b2c26..9d30cb9a79 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -33,7 +33,7 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@7884fcad6b5d53d10323aee724dc68d8b9096a2e # pin@v2 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Version Check run: | pip install requests @@ -66,30 +66,30 @@ jobs: test -f data/secret_key.txt - name: Set up QEMU if: github.event_name != 'pull_request' - uses: docker/setup-qemu-action@27d0a4f181a40b142cce983c5393082c365d1480 # pin@v1 + uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # pin@v2.1.0 - name: Set up Docker Buildx if: github.event_name != 'pull_request' - uses: docker/setup-buildx-action@f211e3e9ded2d9377c8cadc4489a4e38014bc4c9 # pin@v1 + uses: docker/setup-buildx-action@95cb08cb2672c73d4ffd2f422e6d11953d2a9c70 # pin@v2.1.0 - name: Set up cosign if: github.event_name != 'pull_request' - uses: sigstore/cosign-installer@09a077b27eb1310dcfb21981bee195b30ce09de0 # pin@v2.5.0 + uses: sigstore/cosign-installer@7cc35d7fdbe70d4278a0c96779081e6fac665f88 # pin@v2.8.0 - name: Login to Dockerhub if: github.event_name != 'pull_request' - uses: docker/login-action@dd4fa0671be5250ee6f50aedf4cb05514abda2c7 # pin@v1 + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # pin@v2.1.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Extract Docker metadata if: github.event_name != 'pull_request' id: meta - uses: docker/metadata-action@69f6fc9d46f2f8bf0d5491e4aabe0bb8c6a4678a # pin@v4.0.1 + uses: docker/metadata-action@12cce9efe0d49980455aaaca9b071c0befcdd702 # pin@v4.1.0 with: images: | inventree/inventree - name: Build and Push id: build-and-push if: github.event_name != 'pull_request' - uses: docker/build-push-action@ac9327eae2b366085ac7f6a2d02df8aa8ead720a # pin@v2 + uses: docker/build-push-action@c56af957549030174b10d6867f20e78cfd7debc5 # pin@v3.2.0 with: context: . platforms: linux/amd64,linux/arm64,linux/arm/v7 diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index 6b8c1b5473..8c3c4bb1f0 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -22,6 +22,7 @@ env: INVENTREE_DB_NAME: inventree INVENTREE_MEDIA_ROOT: ../test_inventree_media INVENTREE_STATIC_ROOT: ../test_inventree_static + INVENTREE_BACKUP_DIR: ../test_inventree_backup jobs: pep_style: @@ -29,7 +30,7 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@50fbc622fc4ef5163becd7fab6573eac35f8462e # pin@v1 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Enviroment Setup uses: ./.github/actions/setup with: @@ -44,7 +45,7 @@ jobs: needs: pep_style steps: - - uses: actions/checkout@50fbc622fc4ef5163becd7fab6573eac35f8462e # pin@v1 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Enviroment Setup uses: ./.github/actions/setup with: @@ -66,7 +67,7 @@ jobs: needs: pep_style steps: - - uses: actions/checkout@50fbc622fc4ef5163becd7fab6573eac35f8462e # pin@v1 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Enviroment Setup uses: ./.github/actions/setup with: @@ -82,14 +83,14 @@ jobs: needs: pep_style steps: - - uses: actions/checkout@7884fcad6b5d53d10323aee724dc68d8b9096a2e # pin@v2 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Set up Python ${{ env.python_version }} - uses: actions/setup-python@7f80679172b057fc5e90d70d197929d454754a5a # pin@v2 + uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # pin@v4.3.0 with: python-version: ${{ env.python_version }} cache: 'pip' - name: Run pre-commit Checks - uses: pre-commit/action@9b88afc9cd57fd75b655d5c71bd38146d07135fe # pin@v2.0.3 + uses: pre-commit/action@646c83fcd040023954eafda54b4db0192ce70507 # pin@v3.0.0 - name: Check Version run: | pip install requests @@ -113,7 +114,7 @@ jobs: INVENTREE_PYTHON_TEST_PASSWORD: testpassword steps: - - uses: actions/checkout@50fbc622fc4ef5163becd7fab6573eac35f8462e # pin@v1 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Enviroment Setup uses: ./.github/actions/setup with: @@ -143,7 +144,7 @@ jobs: continue-on-error: true steps: - - uses: actions/checkout@50fbc622fc4ef5163becd7fab6573eac35f8462e # pin@v1 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Enviroment Setup uses: ./.github/actions/setup with: @@ -164,7 +165,7 @@ jobs: INVENTREE_PLUGINS_ENABLED: true steps: - - uses: actions/checkout@50fbc622fc4ef5163becd7fab6573eac35f8462e # pin@v1 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Enviroment Setup uses: ./.github/actions/setup with: @@ -199,7 +200,7 @@ jobs: services: postgres: - image: postgres + image: postgres:14 env: POSTGRES_USER: inventree POSTGRES_PASSWORD: password @@ -212,7 +213,7 @@ jobs: - 6379:6379 steps: - - uses: actions/checkout@50fbc622fc4ef5163becd7fab6573eac35f8462e # pin@v1 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Enviroment Setup uses: ./.github/actions/setup with: @@ -257,7 +258,7 @@ jobs: - 3306:3306 steps: - - uses: actions/checkout@50fbc622fc4ef5163becd7fab6573eac35f8462e # pin@v1 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Enviroment Setup uses: ./.github/actions/setup with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index adbb437889..630564b32d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,13 +11,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Code - uses: actions/checkout@7884fcad6b5d53d10323aee724dc68d8b9096a2e # pin@v2 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Version Check run: | pip install requests python3 ci/version_check.py - name: Push to Stable Branch - uses: ad-m/github-push-action@9a46ba8d86d3171233e861a4351b1278a2805c83 # pin@master + uses: ad-m/github-push-action@4dcce6dea3e3c8187237fc86b7dfdc93e5aaae58 # pin@master if: env.stable_release == 'true' with: github_token: ${{ secrets.GITHUB_TOKEN }} @@ -27,7 +27,7 @@ jobs: tweet: runs-on: ubuntu-latest steps: - - uses: Eomm/why-don-t-you-tweet@f61f2a86c30c46528c1398a1abb1f64aa0988f69 # pin@v1 + - uses: Eomm/why-don-t-you-tweet@5936bb1fd0096b1c2bbbb7518746638261bb4dae # pin@v1.0.1 with: tweet-message: "InvenTree release ${{ github.event.release.tag_name }} is out now! Release notes: ${{ github.event.release.html_url }} #opensource @@ -41,7 +41,7 @@ jobs: reddit: runs-on: ubuntu-latest steps: - - uses: bluwy/release-for-reddit-action@4d948192aff856da22f19f9806b00b46ca384547 # pin@v1 + - uses: bluwy/release-for-reddit-action@4b2d034b5c86a24db24363f1064149a8c2db69b4 # pin@v1.2.0 with: username: ${{ secrets.REDDIT_USERNAME }} password: ${{ secrets.REDDIT_PASSWORD }} diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 1e5137b7e7..eefed27ed7 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -14,7 +14,7 @@ jobs: pull-requests: write steps: - - uses: actions/stale@98ed4cb500039dbcccf4bd9bedada4d0187f2757 # pin@v3 + - uses: actions/stale@5ebf00ea0e4c1561e9b43a292ed34424fb1d4578 # pin@v6.0.1 with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-issue-message: 'This issue seems stale. Please react to show this is still diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml index eec0b8e49a..52d0398102 100644 --- a/.github/workflows/translations.yml +++ b/.github/workflows/translations.yml @@ -17,12 +17,13 @@ jobs: INVENTREE_DEBUG: info INVENTREE_MEDIA_ROOT: ./media INVENTREE_STATIC_ROOT: ./static + INVENTREE_BACKUP_DIR: ./backup steps: - name: Checkout Code - uses: actions/checkout@7884fcad6b5d53d10323aee724dc68d8b9096a2e # pin@v2 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Set up Python 3.9 - uses: actions/setup-python@152ba7c4dd6521b8e9c93f72d362ce03bf6c4f20 # pin@v1 + uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # pin@v4.3.0 with: python-version: 3.9 - name: Install Dependencies @@ -42,7 +43,7 @@ jobs: git add "*.po" git commit -m "updated translation base" - name: Push changes - uses: ad-m/github-push-action@9a46ba8d86d3171233e861a4351b1278a2805c83 # pin@master + uses: ad-m/github-push-action@4dcce6dea3e3c8187237fc86b7dfdc93e5aaae58 # pin@master with: github_token: ${{ secrets.GITHUB_TOKEN }} branch: l10 diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml index e6320ab732..50cfe65196 100644 --- a/.github/workflows/update.yml +++ b/.github/workflows/update.yml @@ -9,7 +9,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@7884fcad6b5d53d10323aee724dc68d8b9096a2e # pin@v2 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v3.1.0 - name: Setup run: pip install -r requirements-dev.txt - name: Update requirements.txt @@ -17,7 +17,7 @@ jobs: - name: Update requirements-dev.txt run: pip-compile --generate-hashes --output-file=requirements-dev.txt requirements-dev.in -U - - uses: stefanzweifel/git-auto-commit-action@49620cd3ed21ee620a48530e81dba0d139c9cb80 # pin@v4 + - uses: stefanzweifel/git-auto-commit-action@fd157da78fa13d9383e5580d1fd1184d89554b51 # pin@v4.15.1 with: commit_message: "[Bot] Updated dependency" branch: dep-update diff --git a/.gitpod.yml b/.gitpod.yml index b66596d83e..b571d80c88 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -5,6 +5,7 @@ tasks: export INVENTREE_DB_NAME='/workspace/InvenTree/dev/database.sqlite3' export INVENTREE_MEDIA_ROOT='/workspace/InvenTree/inventree-data/media' export INVENTREE_STATIC_ROOT='/workspace/InvenTree/dev/static' + export INVENTREE_BACKUP_DIR='/workspace/InvenTree/dev/backup' export PIP_USER='no' sudo apt install -y gettext @@ -24,6 +25,7 @@ tasks: export INVENTREE_DB_NAME='/workspace/InvenTree/dev/database.sqlite3' export INVENTREE_MEDIA_ROOT='/workspace/InvenTree/inventree-data/media' export INVENTREE_STATIC_ROOT='/workspace/InvenTree/dev/static' + export INVENTREE_BACKUP_DIR='/workspace/InvenTree/dev/backup' source venv/bin/activate inv server diff --git a/.pkgr.yml b/.pkgr.yml new file mode 100644 index 0000000000..a6f7061407 --- /dev/null +++ b/.pkgr.yml @@ -0,0 +1,47 @@ +name: inventree +description: Open Source Inventory Management System +homepage: https://inventree.org +notifications: false +buildpack: https://github.com/mjmair/heroku-buildpack-python#v216-mjmair +env: + - STACK=heroku-20 + - DISABLE_COLLECTSTATIC=1 + - INVENTREE_DB_ENGINE=sqlite3 + - INVENTREE_DB_NAME=database.sqlite3 + - INVENTREE_PLUGINS_ENABLED + - INVENTREE_MEDIA_ROOT=/opt/inventree/media + - INVENTREE_STATIC_ROOT=/opt/inventree/static + - INVENTREE_BACKUP_DIR=/opt/inventree/backup + - INVENTREE_PLUGIN_FILE=/opt/inventree/plugins.txt + - INVENTREE_CONFIG_FILE=/opt/inventree/config.yaml +after_install: contrib/packager.io/postinstall.sh +targets: + ubuntu-20.04: + dependencies: + - curl + - python3 + - python3-venv + - python3-pip + - python3-cffi + - python3-brotli + - python3-wheel + - libpango-1.0-0 + - libharfbuzz0b + - libpangoft2-1.0-0 + - gettext + - nginx + - jq + debian-11: + dependencies: + - curl + - python3 + - python3-venv + - python3-pip + - python3-cffi + - python3-brotli + - python3-wheel + - libpango-1.0-0 + - libpangoft2-1.0-0 + - gettext + - nginx + - jq diff --git a/Dockerfile b/Dockerfile index bc2dc9d9d7..67a44a9660 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,6 +31,7 @@ ENV INVENTREE_MNG_DIR="${INVENTREE_HOME}/InvenTree" ENV INVENTREE_DATA_DIR="${INVENTREE_HOME}/data" ENV INVENTREE_STATIC_ROOT="${INVENTREE_DATA_DIR}/static" ENV INVENTREE_MEDIA_ROOT="${INVENTREE_DATA_DIR}/media" +ENV INVENTREE_BACKUP_DIR="${INVENTREE_DATA_DIR}/backup" ENV INVENTREE_PLUGIN_DIR="${INVENTREE_DATA_DIR}/plugins" # InvenTree configuration files @@ -67,7 +68,7 @@ RUN apt-get install -y --no-install-recommends \ # SQLite support sqlite3 \ # PostgreSQL support - libpq-dev \ + libpq-dev postgresql-client \ # MySQL / MariaDB support default-libmysqlclient-dev mariadb-client && \ apt-get autoclean && apt-get autoremove diff --git a/InvenTree/InvenTree/api_tester.py b/InvenTree/InvenTree/api_tester.py index 1b3cc9c5b4..4e55094e4b 100644 --- a/InvenTree/InvenTree/api_tester.py +++ b/InvenTree/InvenTree/api_tester.py @@ -10,6 +10,9 @@ from django.http.response import StreamingHttpResponse from rest_framework.test import APITestCase +from plugin import registry +from plugin.models import PluginConfig + class UserMixin: """Mixin to setup a user and login for tests. @@ -87,6 +90,21 @@ class UserMixin: break +class PluginMixin: + """Mixin to ensure that all plugins are loaded for tests.""" + + def setUp(self): + """Setup for plugin tests.""" + super().setUp() + + # Load plugin configs + self.plugin_confs = PluginConfig.objects.all() + # Reload if not present + if not self.plugin_confs: + registry.reload_plugins() + self.plugin_confs = PluginConfig.objects.all() + + class InvenTreeAPITestCase(UserMixin, APITestCase): """Base class for running InvenTree API tests.""" diff --git a/InvenTree/InvenTree/api_version.py b/InvenTree/InvenTree/api_version.py index 22c65f2417..c7a133c517 100644 --- a/InvenTree/InvenTree/api_version.py +++ b/InvenTree/InvenTree/api_version.py @@ -2,11 +2,14 @@ # InvenTree API version -INVENTREE_API_VERSION = 76 +INVENTREE_API_VERSION = 77 """ Increment this API version number whenever there is a significant change to the API that any clients need to know about +v77 -> 2022-10-12 : https://github.com/inventree/InvenTree/pull/3772 + - Adds model permission checks for barcode assignment actions + v76 -> 2022-09-10 : https://github.com/inventree/InvenTree/pull/3640 - Refactor of barcode data on the API - StockItem.uid renamed to StockItem.barcode_hash diff --git a/InvenTree/InvenTree/apps.py b/InvenTree/InvenTree/apps.py index 7190197104..6e2c020373 100644 --- a/InvenTree/InvenTree/apps.py +++ b/InvenTree/InvenTree/apps.py @@ -1,8 +1,10 @@ """AppConfig for inventree app.""" import logging +from importlib import import_module +from pathlib import Path -from django.apps import AppConfig +from django.apps import AppConfig, apps from django.conf import settings from django.contrib.auth import get_user_model from django.core.exceptions import AppRegistryNotReady @@ -23,10 +25,11 @@ class InvenTreeConfig(AppConfig): def ready(self): """Setup background tasks and update exchange rates.""" - if canAppAccessDatabase(): + if canAppAccessDatabase() or settings.TESTING_ENV: self.remove_obsolete_tasks() + self.collect_tasks() self.start_background_tasks() if not isInTestMode(): # pragma: no cover @@ -54,68 +57,31 @@ class InvenTreeConfig(AppConfig): def start_background_tasks(self): """Start all background tests for InvenTree.""" - try: - from django_q.models import Schedule - except AppRegistryNotReady: # pragma: no cover - logger.warning("Cannot start background tasks - app registry not ready") - return logger.info("Starting background tasks...") - # Remove successful task results from the database - InvenTree.tasks.schedule_task( - 'InvenTree.tasks.delete_successful_tasks', - schedule_type=Schedule.DAILY, - ) + for task in InvenTree.tasks.tasks.task_list: + ref_name = f'{task.func.__module__}.{task.func.__name__}' + InvenTree.tasks.schedule_task( + ref_name, + schedule_type=task.interval, + minutes=task.minutes, + ) - # Check for InvenTree updates - InvenTree.tasks.schedule_task( - 'InvenTree.tasks.check_for_updates', - schedule_type=Schedule.DAILY - ) + logger.info("Started background tasks...") - # Heartbeat to let the server know the background worker is running - InvenTree.tasks.schedule_task( - 'InvenTree.tasks.heartbeat', - schedule_type=Schedule.MINUTES, - minutes=15 - ) + def collect_tasks(self): + """Collect all background tasks.""" - # Keep exchange rates up to date - InvenTree.tasks.schedule_task( - 'InvenTree.tasks.update_exchange_rates', - schedule_type=Schedule.DAILY, - ) + for app_name, app in apps.app_configs.items(): + if app_name == 'InvenTree': + continue - # Delete old error messages - InvenTree.tasks.schedule_task( - 'InvenTree.tasks.delete_old_error_logs', - schedule_type=Schedule.DAILY, - ) - - # Delete old notification records - InvenTree.tasks.schedule_task( - 'common.tasks.delete_old_notifications', - schedule_type=Schedule.DAILY, - ) - - # Check for overdue purchase orders - InvenTree.tasks.schedule_task( - 'order.tasks.check_overdue_purchase_orders', - schedule_type=Schedule.DAILY - ) - - # Check for overdue sales orders - InvenTree.tasks.schedule_task( - 'order.tasks.check_overdue_sales_orders', - schedule_type=Schedule.DAILY, - ) - - # Check for overdue build orders - InvenTree.tasks.schedule_task( - 'build.tasks.check_overdue_build_orders', - schedule_type=Schedule.DAILY - ) + if Path(app.path).joinpath('tasks.py').exists(): + try: + import_module(f'{app.module.__package__}.tasks') + except Exception as e: # pragma: no cover + logger.error(f"Error loading tasks for {app_name}: {e}") def update_exchange_rates(self): # pragma: no cover """Update exchange rates each time the server is started. diff --git a/InvenTree/InvenTree/config.py b/InvenTree/InvenTree/config.py index 4c95e84970..54973abb9d 100644 --- a/InvenTree/InvenTree/config.py +++ b/InvenTree/InvenTree/config.py @@ -22,6 +22,16 @@ def get_base_dir() -> Path: return Path(__file__).parent.parent.resolve() +def ensure_dir(path: Path) -> None: + """Ensure that a directory exists. + + If it does not exist, create it. + """ + + if not path.exists(): + path.mkdir(parents=True, exist_ok=True) + + def get_config_file(create=True) -> Path: """Returns the path of the InvenTree configuration file. @@ -39,6 +49,7 @@ def get_config_file(create=True) -> Path: if not cfg_filename.exists() and create: print("InvenTree configuration file 'config.yaml' not found - creating default file") + ensure_dir(cfg_filename.parent) cfg_template = base_dir.joinpath("config_template.yaml") shutil.copyfile(cfg_template, cfg_filename) @@ -149,6 +160,22 @@ def get_static_dir(create=True): return sd +def get_backup_dir(create=True): + """Return the absolute path for the backup directory""" + + bd = get_setting('INVENTREE_BACKUP_DIR', 'backup_dir') + + if not bd: + raise FileNotFoundError('INVENTREE_BACKUP_DIR not specified') + + bd = Path(bd).resolve() + + if create: + bd.mkdir(parents=True, exist_ok=True) + + return bd + + def get_plugin_file(): """Returns the path of the InvenTree plugins specification file. @@ -169,6 +196,7 @@ def get_plugin_file(): if not plugin_file.exists(): logger.warning("Plugin configuration file does not exist - creating default file") logger.info(f"Creating plugin file at '{plugin_file}'") + ensure_dir(plugin_file.parent) # If opening the file fails (no write permission, for example), then this will throw an error plugin_file.write_text("# InvenTree Plugins (uses PIP framework to install)\n\n") @@ -201,6 +229,7 @@ def get_secret_key(): if not secret_key_file.exists(): logger.info(f"Generating random key file at '{secret_key_file}'") + ensure_dir(secret_key_file.parent) # Create a random key file options = string.digits + string.ascii_letters + string.punctuation diff --git a/InvenTree/InvenTree/fields.py b/InvenTree/InvenTree/fields.py index caf625f2b8..d754737cfa 100644 --- a/InvenTree/InvenTree/fields.py +++ b/InvenTree/InvenTree/fields.py @@ -4,7 +4,6 @@ import sys from decimal import Decimal from django import forms -from django.core import validators from django.db import models as models from django.utils.translation import gettext_lazy as _ @@ -15,7 +14,7 @@ from rest_framework.fields import URLField as RestURLField import InvenTree.helpers -from .validators import allowable_url_schemes +from .validators import AllowedURLValidator, allowable_url_schemes class InvenTreeRestURLField(RestURLField): @@ -34,7 +33,7 @@ class InvenTreeRestURLField(RestURLField): class InvenTreeURLField(models.URLField): """Custom URL field which has custom scheme validators.""" - default_validators = [validators.URLValidator(schemes=allowable_url_schemes())] + default_validators = [AllowedURLValidator()] def __init__(self, **kwargs): """Initialization method for InvenTreeURLField""" diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py index 0b34dee851..593a01bbf6 100644 --- a/InvenTree/InvenTree/helpers.py +++ b/InvenTree/InvenTree/helpers.py @@ -342,7 +342,7 @@ def normalize(d): return d.quantize(Decimal(1)) if d == d.to_integral() else d.normalize() -def increment(n): +def increment(value): """Attempt to increment an integer (or a string that looks like an integer). e.g. @@ -351,12 +351,14 @@ def increment(n): 2 -> 3 AB01 -> AB02 QQQ -> QQQ + """ - value = str(n).strip() + value = str(value).strip() # Ignore empty strings - if not value: - return value + if value in ['', None]: + # Provide a default value if provided with a null input + return '1' pattern = r"(.*?)(\d+)?$" @@ -542,138 +544,211 @@ def DownloadFile(data, filename, content_type='application/text', inline=False) return response -def extract_serial_numbers(serials, expected_quantity, next_number: int): - """Attempt to extract serial numbers from an input string. +def increment_serial_number(serial: str): + """Given a serial number, (attempt to) generate the *next* serial number. - Requirements: - - Serial numbers can be either strings, or integers - - Serial numbers can be split by whitespace / newline / commma chars - - Serial numbers can be supplied as an inclusive range using hyphen char e.g. 10-20 - - Serial numbers can be defined as ~ for getting the next available serial number - - Serial numbers can be supplied as + for getting all expecteded numbers starting from - - Serial numbers can be supplied as + for getting numbers starting from + Note: This method is exposed to custom plugins. - Args: - serials: input string with patterns - expected_quantity: The number of (unique) serial numbers we expect - next_number(int): the next possible serial number + Arguments: + serial: The serial number which should be incremented + + Returns: + incremented value, or None if incrementing could not be performed. """ - serials = serials.strip() - # fill in the next serial number into the serial - while '~' in serials: - serials = serials.replace('~', str(next_number), 1) - next_number += 1 + from plugin.registry import registry - # Split input string by whitespace or comma (,) characters - groups = re.split(r"[\s,]+", serials) + # Ensure we start with a string value + if serial is not None: + serial = str(serial).strip() - numbers = [] - errors = [] + # First, let any plugins attempt to increment the serial number + for plugin in registry.with_mixin('validation'): + result = plugin.increment_serial_number(serial) + if result is not None: + return str(result) - # Helper function to check for duplicated numbers - def add_sn(sn): - # Attempt integer conversion first, so numerical strings are never stored - try: - sn = int(sn) - except ValueError: - pass + # If we get to here, no plugins were able to "increment" the provided serial value + # Attempt to perform increment according to some basic rules + return increment(serial) - if sn in numbers: - errors.append(_('Duplicate serial: {sn}').format(sn=sn)) - else: - numbers.append(sn) + +def extract_serial_numbers(input_string, expected_quantity: int, starting_value=None): + """Extract a list of serial numbers from a provided input string. + + The input string can be specified using the following concepts: + + - Individual serials are separated by comma: 1, 2, 3, 6,22 + - Sequential ranges with provided limits are separated by hyphens: 1-5, 20 - 40 + - The "next" available serial number can be specified with the tilde (~) character + - Serial numbers can be supplied as + for getting all expecteded numbers starting from + - Serial numbers can be supplied as + for getting numbers starting from + + Actual generation of sequential serials is passed to the 'validation' plugin mixin, + allowing custom plugins to determine how serial values are incremented. + + Arguments: + input_string: Input string with specified serial numbers (string, or integer) + expected_quantity: The number of (unique) serial numbers we expect + starting_value: Provide a starting value for the sequence (or None) + """ + + if starting_value is None: + starting_value = increment_serial_number(None) try: expected_quantity = int(expected_quantity) except ValueError: raise ValidationError([_("Invalid quantity provided")]) - if len(serials) == 0: + if input_string: + input_string = str(input_string).strip() + else: + input_string = '' + + if len(input_string) == 0: raise ValidationError([_("Empty serial number string")]) - # If the user has supplied the correct number of serials, don't process them for groups - # just add them so any duplicates (or future validations) are checked + next_value = increment_serial_number(starting_value) + + # Substitute ~ character with latest value + while '~' in input_string and next_value: + input_string = input_string.replace('~', str(next_value), 1) + next_value = increment_serial_number(next_value) + + # Split input string by whitespace or comma (,) characters + groups = re.split(r"[\s,]+", input_string) + + serials = [] + errors = [] + + def add_error(error: str): + """Helper function for adding an error message""" + if error not in errors: + errors.append(error) + + def add_serial(serial): + """Helper function to check for duplicated values""" + if serial in serials: + add_error(_("Duplicate serial") + f": {serial}") + else: + serials.append(serial) + + # If the user has supplied the correct number of serials, do not split into groups if len(groups) == expected_quantity: for group in groups: - add_sn(group) + add_serial(group) if len(errors) > 0: raise ValidationError(errors) - - return numbers + else: + return serials for group in groups: group = group.strip() - # Hyphen indicates a range of numbers if '-' in group: + """Hyphen indicates a range of values: + e.g. 10-20 + """ items = group.split('-') - if len(items) == 2 and all([i.isnumeric() for i in items]): - a = items[0].strip() - b = items[1].strip() + if len(items) == 2: + a = items[0] + b = items[1] - try: - a = int(a) - b = int(b) - - if a < b: - for n in range(a, b + 1): - add_sn(n) - else: - errors.append(_("Invalid group range: {g}").format(g=group)) - - except ValueError: - errors.append(_("Invalid group: {g}").format(g=group)) + if a == b: + # Invalid group + add_error(_("Invalid group range: {g}").format(g=group)) continue - else: - # More than 2 hyphens or non-numeric group so add without interpolating - add_sn(group) - # plus signals either - # 1: 'start+': expected number of serials, starting at start - # 2: 'start+number': number of serials, starting at start + group_items = [] + + count = 0 + + a_next = a + + while a_next is not None and a_next not in group_items: + group_items.append(a_next) + count += 1 + + # Progress to the 'next' sequential value + a_next = str(increment_serial_number(a_next)) + + if a_next == b: + # Successfully got to the end of the range + group_items.append(b) + break + + elif count > expected_quantity: + # More than the allowed number of items + break + + elif a_next is None: + break + + if len(group_items) > 0 and group_items[0] == a and group_items[-1] == b: + # In this case, the range extraction looks like it has worked + for item in group_items: + add_serial(item) + else: + add_serial(group) + # add_error(_("Invalid group range: {g}").format(g=group)) + + else: + # In the case of a different number of hyphens, simply add the entire group + add_serial(group) + elif '+' in group: + """Plus character (+) indicates either: + - + - Expected number of serials, beginning at the specified 'start' character + - + - Specified number of serials, beginning at the specified 'start' character + """ items = group.split('+') - # case 1, 2 - if len(items) == 2: - start = int(items[0]) + sequence_items = [] + counter = 0 + sequence_count = max(0, expected_quantity - len(serials)) - # case 2 - if bool(items[1]): - end = start + int(items[1]) + 1 + if len(items) > 2 or len(items) == 0: + add_error(_("Invalid group sequence: {g}").format(g=group)) + continue + elif len(items) == 2: + try: + if items[1] not in ['', None]: + sequence_count = int(items[1]) + 1 + except ValueError: + add_error(_("Invalid group sequence: {g}").format(g=group)) + continue - # case 1 - else: - end = start + (expected_quantity - len(numbers)) + value = items[0] - for n in range(start, end): - add_sn(n) - # no case + # Keep incrementing up to the specified quantity + while value is not None and value not in sequence_items and counter < sequence_count: + sequence_items.append(value) + value = increment_serial_number(value) + counter += 1 + + if len(sequence_items) == sequence_count: + for item in sequence_items: + add_serial(item) else: - errors.append(_("Invalid group sequence: {g}").format(g=group)) + add_error(_("Invalid group sequence: {g}").format(g=group)) - # At this point, we assume that the "group" is just a single serial value - elif group: - add_sn(group) - - # No valid input group detected else: - raise ValidationError(_(f"Invalid/no group {group}")) + # At this point, we assume that the 'group' is just a single serial value + add_serial(group) if len(errors) > 0: raise ValidationError(errors) - if len(numbers) == 0: + if len(serials) == 0: raise ValidationError([_("No serial numbers found")]) - # The number of extracted serial numbers must match the expected quantity - if expected_quantity != len(numbers): - raise ValidationError([_("Number of unique serial numbers ({s}) must match quantity ({q})").format(s=len(numbers), q=expected_quantity)]) + if len(serials) != expected_quantity: + raise ValidationError([_("Number of unique serial numbers ({s}) must match quantity ({q})").format(s=len(serials), q=expected_quantity)]) - return numbers + return serials def validateFilterString(value, model=None): diff --git a/InvenTree/InvenTree/ready.py b/InvenTree/InvenTree/ready.py index 81a050321d..c0f7c25141 100644 --- a/InvenTree/InvenTree/ready.py +++ b/InvenTree/InvenTree/ready.py @@ -35,6 +35,12 @@ def canAppAccessDatabase(allow_test: bool = False, allow_plugins: bool = False): 'collectstatic', 'makemessages', 'compilemessages', + 'backup', + 'dbbackup', + 'mediabackup', + 'restore', + 'dbrestore', + 'mediarestore', ] if not allow_test: diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index c14d957147..5e6a782948 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -131,6 +131,11 @@ STATIC_COLOR_THEMES_DIR = STATIC_ROOT.joinpath('css', 'color-themes').resolve() # Web URL endpoint for served media files MEDIA_URL = '/media/' +# Backup directories +DBBACKUP_STORAGE = 'django.core.files.storage.FileSystemStorage' +DBBACKUP_STORAGE_OPTIONS = {'location': config.get_backup_dir()} +DBBACKUP_SEND_EMAIL = False + # Application definition INSTALLED_APPS = [ @@ -176,6 +181,7 @@ INSTALLED_APPS = [ 'error_report', # Error reporting in the admin interface 'django_q', 'formtools', # Form wizard tools + 'dbbackup', # Backups - django-dbbackup 'allauth', # Base app for SSO 'allauth.account', # Extend user with accounts @@ -607,6 +613,8 @@ if type(EXTRA_URL_SCHEMES) not in [list]: # pragma: no cover # Internationalization # https://docs.djangoproject.com/en/dev/topics/i18n/ LANGUAGE_CODE = get_setting('INVENTREE_LANGUAGE', 'language', 'en-us') +# Store language settings for 30 days +LANGUAGE_COOKIE_AGE = 2592000 # If a new language translation is supported, it must be added here LANGUAGES = [ diff --git a/InvenTree/InvenTree/static/css/inventree.css b/InvenTree/InvenTree/static/css/inventree.css index 4c827d39a7..3658a216cf 100644 --- a/InvenTree/InvenTree/static/css/inventree.css +++ b/InvenTree/InvenTree/static/css/inventree.css @@ -679,6 +679,10 @@ main { color: #A94442; } +.form-error-message { + display: block; +} + .modal input { width: 100%; } diff --git a/InvenTree/InvenTree/tasks.py b/InvenTree/InvenTree/tasks.py index 90deaaa225..1c856bebba 100644 --- a/InvenTree/InvenTree/tasks.py +++ b/InvenTree/InvenTree/tasks.py @@ -4,11 +4,14 @@ import json import logging import re import warnings +from dataclasses import dataclass from datetime import timedelta +from typing import Callable from django.conf import settings from django.core import mail as django_mail from django.core.exceptions import AppRegistryNotReady +from django.core.management import call_command from django.db.utils import OperationalError, ProgrammingError from django.utils import timezone @@ -125,6 +128,79 @@ def offload_task(taskname, *args, force_async=False, force_sync=False, **kwargs) _func(*args, **kwargs) +@dataclass() +class ScheduledTask: + """A scheduled task. + + - interval: The interval at which the task should be run + - minutes: The number of minutes between task runs + - func: The function to be run + """ + + func: Callable + interval: str + minutes: int = None + + MINUTES = "I" + HOURLY = "H" + DAILY = "D" + WEEKLY = "W" + MONTHLY = "M" + QUARTERLY = "Q" + YEARLY = "Y" + TYPE = [MINUTES, HOURLY, DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY] + + +class TaskRegister: + """Registery for periodicall tasks.""" + task_list: list[ScheduledTask] = [] + + def register(self, task, schedule, minutes: int = None): + """Register a task with the que.""" + self.task_list.append(ScheduledTask(task, schedule, minutes)) + + +tasks = TaskRegister() + + +def scheduled_task(interval: str, minutes: int = None, tasklist: TaskRegister = None): + """Register the given task as a scheduled task. + + Example: + ```python + @register(ScheduledTask.DAILY) + def my_custom_funciton(): + ... + ``` + + Args: + interval (str): The interval at which the task should be run + minutes (int, optional): The number of minutes between task runs. Defaults to None. + tasklist (TaskRegister, optional): The list the tasks should be registered to. Defaults to None. + + Raises: + ValueError: If decorated object is not callable + ValueError: If interval is not valid + + Returns: + _type_: _description_ + """ + + def _task_wrapper(admin_class): + if not isinstance(admin_class, Callable): + raise ValueError('Wrapped object must be a function') + + if interval not in ScheduledTask.TYPE: + raise ValueError(f'Invalid interval. Must be one of {ScheduledTask.TYPE}') + + _tasks = tasklist if tasklist else tasks + _tasks.register(admin_class, interval, minutes=minutes) + + return admin_class + return _task_wrapper + + +@scheduled_task(ScheduledTask.MINUTES, 15) def heartbeat(): """Simple task which runs at 5 minute intervals, so we can determine that the background worker is actually running. @@ -148,6 +224,7 @@ def heartbeat(): heartbeats.delete() +@scheduled_task(ScheduledTask.DAILY) def delete_successful_tasks(): """Delete successful task logs which are more than a month old.""" try: @@ -167,6 +244,7 @@ def delete_successful_tasks(): results.delete() +@scheduled_task(ScheduledTask.DAILY) def delete_old_error_logs(): """Delete old error logs from the server.""" try: @@ -189,6 +267,7 @@ def delete_old_error_logs(): return +@scheduled_task(ScheduledTask.DAILY) def check_for_updates(): """Check if there is an update for InvenTree.""" try: @@ -231,6 +310,7 @@ def check_for_updates(): ) +@scheduled_task(ScheduledTask.DAILY) def update_exchange_rates(): """Update currency exchange rates.""" try: @@ -272,6 +352,16 @@ def update_exchange_rates(): logger.error(f"Error updating exchange rates: {e}") +@scheduled_task(ScheduledTask.DAILY) +def run_backup(): + """Run the backup command.""" + from common.models import InvenTreeSetting + + if InvenTreeSetting.get_setting('INVENTREE_BACKUP_ENABLE'): + call_command("dbbackup", noinput=True, clean=True, compress=True, interactive=False) + call_command("mediabackup", noinput=True, clean=True, compress=True, interactive=False) + + def send_email(subject, body, recipients, from_email=None, html_message=None): """Send an email with the specified subject and body, to the specified recipients list.""" if type(recipients) == str: diff --git a/InvenTree/InvenTree/tests.py b/InvenTree/InvenTree/tests.py index 5cf07df637..145b271480 100644 --- a/InvenTree/InvenTree/tests.py +++ b/InvenTree/InvenTree/tests.py @@ -39,8 +39,9 @@ class ValidatorTest(TestCase): """Test part name validator.""" validate_part_name('hello world') + # Validate with some strange chars with self.assertRaises(django_exceptions.ValidationError): - validate_part_name('This | name is not } valid') + validate_part_name('### <> This | name is not } valid') def test_overage(self): """Test overage validator.""" @@ -309,7 +310,7 @@ class TestIncrement(TestCase): def tests(self): """Test 'intelligent' incrementing function.""" tests = [ - ("", ""), + ("", '1'), (1, "2"), ("001", "002"), ("1001", "1002"), @@ -418,7 +419,11 @@ class TestMPTT(TestCase): class TestSerialNumberExtraction(TestCase): - """Tests for serial number extraction code.""" + """Tests for serial number extraction code. + + Note that while serial number extraction is made available to custom plugins, + only simple integer-based extraction is tested here. + """ def test_simple(self): """Test simple serial numbers.""" @@ -427,7 +432,7 @@ class TestSerialNumberExtraction(TestCase): sn = e("1-5", 5, 1) self.assertEqual(len(sn), 5, 1) for i in range(1, 6): - self.assertIn(i, sn) + self.assertIn(str(i), sn) sn = e("1, 2, 3, 4, 5", 5, 1) self.assertEqual(len(sn), 5) @@ -435,55 +440,55 @@ class TestSerialNumberExtraction(TestCase): # Test partially specifying serials sn = e("1, 2, 4+", 5, 1) self.assertEqual(len(sn), 5) - self.assertEqual(sn, [1, 2, 4, 5, 6]) + self.assertEqual(sn, ['1', '2', '4', '5', '6']) # Test groups are not interpolated if enough serials are supplied sn = e("1, 2, 3, AF5-69H, 5", 5, 1) self.assertEqual(len(sn), 5) - self.assertEqual(sn, [1, 2, 3, "AF5-69H", 5]) + self.assertEqual(sn, ['1', '2', '3', 'AF5-69H', '5']) # Test groups are not interpolated with more than one hyphen in a word sn = e("1, 2, TG-4SR-92, 4+", 5, 1) self.assertEqual(len(sn), 5) - self.assertEqual(sn, [1, 2, "TG-4SR-92", 4, 5]) + self.assertEqual(sn, ['1', '2', "TG-4SR-92", '4', '5']) # Test groups are not interpolated with alpha characters sn = e("1, A-2, 3+", 5, 1) self.assertEqual(len(sn), 5) - self.assertEqual(sn, [1, "A-2", 3, 4, 5]) + self.assertEqual(sn, ['1', "A-2", '3', '4', '5']) # Test multiple placeholders - sn = e("1 2 ~ ~ ~", 5, 3) + sn = e("1 2 ~ ~ ~", 5, 2) self.assertEqual(len(sn), 5) - self.assertEqual(sn, [1, 2, 3, 4, 5]) + self.assertEqual(sn, ['1', '2', '3', '4', '5']) sn = e("1-5, 10-15", 11, 1) - self.assertIn(3, sn) - self.assertIn(13, sn) + self.assertIn('3', sn) + self.assertIn('13', sn) sn = e("1+", 10, 1) self.assertEqual(len(sn), 10) - self.assertEqual(sn, [_ for _ in range(1, 11)]) + self.assertEqual(sn, [str(_) for _ in range(1, 11)]) sn = e("4, 1+2", 4, 1) self.assertEqual(len(sn), 4) - self.assertEqual(sn, [4, 1, 2, 3]) + self.assertEqual(sn, ['4', '1', '2', '3']) sn = e("~", 1, 1) self.assertEqual(len(sn), 1) - self.assertEqual(sn, [1]) + self.assertEqual(sn, ['2']) sn = e("~", 1, 3) self.assertEqual(len(sn), 1) - self.assertEqual(sn, [3]) + self.assertEqual(sn, ['4']) - sn = e("~+", 2, 5) + sn = e("~+", 2, 4) self.assertEqual(len(sn), 2) - self.assertEqual(sn, [5, 6]) + self.assertEqual(sn, ['5', '6']) - sn = e("~+3", 4, 5) + sn = e("~+3", 4, 4) self.assertEqual(len(sn), 4) - self.assertEqual(sn, [5, 6, 7, 8]) + self.assertEqual(sn, ['5', '6', '7', '8']) def test_failures(self): """Test wron serial numbers.""" @@ -522,19 +527,19 @@ class TestSerialNumberExtraction(TestCase): sn = e("1 3-5 9+2", 7, 1) self.assertEqual(len(sn), 7) - self.assertEqual(sn, [1, 3, 4, 5, 9, 10, 11]) + self.assertEqual(sn, ['1', '3', '4', '5', '9', '10', '11']) sn = e("1,3-5,9+2", 7, 1) self.assertEqual(len(sn), 7) - self.assertEqual(sn, [1, 3, 4, 5, 9, 10, 11]) + self.assertEqual(sn, ['1', '3', '4', '5', '9', '10', '11']) - sn = e("~+2", 3, 14) + sn = e("~+2", 3, 13) self.assertEqual(len(sn), 3) - self.assertEqual(sn, [14, 15, 16]) + self.assertEqual(sn, ['14', '15', '16']) - sn = e("~+", 2, 14) + sn = e("~+", 2, 13) self.assertEqual(len(sn), 2) - self.assertEqual(sn, [14, 15]) + self.assertEqual(sn, ['14', '15']) class TestVersionNumber(TestCase): diff --git a/InvenTree/InvenTree/validators.py b/InvenTree/InvenTree/validators.py index ecc624d966..c05a573cf2 100644 --- a/InvenTree/InvenTree/validators.py +++ b/InvenTree/InvenTree/validators.py @@ -4,6 +4,7 @@ import re from decimal import Decimal, InvalidOperation from django.conf import settings +from django.core import validators from django.core.exceptions import FieldDoesNotExist, ValidationError from django.utils.translation import gettext_lazy as _ @@ -37,17 +38,49 @@ def allowable_url_schemes(): return schemes +class AllowedURLValidator(validators.URLValidator): + """Custom URL validator to allow for custom schemes.""" + def __call__(self, value): + """Validate the URL.""" + self.schemes = allowable_url_schemes() + super().__call__(value) + + def validate_part_name(value): - """Prevent some illegal characters in part names.""" - for c in ['|', '#', '$', '{', '}']: - if c in str(value): - raise ValidationError( - _('Invalid character in part name') - ) + """Validate the name field for a Part instance + + This function is exposed to any Validation plugins, and thus can be customized. + """ + + from plugin.registry import registry + + for plugin in registry.with_mixin('validation'): + # Run the name through each custom validator + # If the plugin returns 'True' we will skip any subsequent validation + if plugin.validate_part_name(value): + return def validate_part_ipn(value): - """Validate the Part IPN against regex rule.""" + """Validate the IPN field for a Part instance. + + This function is exposed to any Validation plugins, and thus can be customized. + + If no validation errors are raised, the IPN is also validated against a configurable regex pattern. + """ + + from plugin.registry import registry + + plugins = registry.with_mixin('validation') + + for plugin in plugins: + # Run the IPN through each custom validator + # If the plugin returns 'True' we will skip any subsequent validation + if plugin.validate_part_ipn(value): + return + + # If we get to here, none of the plugins have raised an error + pattern = common.models.InvenTreeSetting.get_setting('PART_IPN_REGEX') if pattern: @@ -59,28 +92,25 @@ def validate_part_ipn(value): def validate_purchase_order_reference(value): """Validate the 'reference' field of a PurchaseOrder.""" - pattern = common.models.InvenTreeSetting.get_setting('PURCHASEORDER_REFERENCE_REGEX') - if pattern: - match = re.search(pattern, value) + from order.models import PurchaseOrder - if match is None: - raise ValidationError(_('Reference must match pattern {pattern}').format(pattern=pattern)) + # If we get to here, run the "default" validation routine + PurchaseOrder.validate_reference_field(value) def validate_sales_order_reference(value): """Validate the 'reference' field of a SalesOrder.""" - pattern = common.models.InvenTreeSetting.get_setting('SALESORDER_REFERENCE_REGEX') - if pattern: - match = re.search(pattern, value) + from order.models import SalesOrder - if match is None: - raise ValidationError(_('Reference must match pattern {pattern}').format(pattern=pattern)) + # If we get to here, run the "default" validation routine + SalesOrder.validate_reference_field(value) def validate_tree_name(value): """Placeholder for legacy function used in migrations.""" + ... def validate_overage(value): diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index fd880c7a38..b22902bd65 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -14,7 +14,6 @@ from InvenTree.serializers import InvenTreeModelSerializer, InvenTreeAttachmentS from InvenTree.serializers import UserSerializer import InvenTree.helpers -from InvenTree.helpers import extract_serial_numbers from InvenTree.serializers import InvenTreeDecimalField from InvenTree.status_codes import StockStatus @@ -260,7 +259,11 @@ class BuildOutputCreateSerializer(serializers.Serializer): if serial_numbers: try: - self.serials = extract_serial_numbers(serial_numbers, quantity, part.getLatestSerialNumberInt()) + self.serials = InvenTree.helpers.extract_serial_numbers( + serial_numbers, + quantity, + part.get_latest_serial_number() + ) except DjangoValidationError as e: raise ValidationError({ 'serial_numbers': e.messages, @@ -270,12 +273,12 @@ class BuildOutputCreateSerializer(serializers.Serializer): existing = [] for serial in self.serials: - if part.checkIfSerialNumberExists(serial): + if not part.validate_serial_number(serial): existing.append(serial) if len(existing) > 0: - msg = _("The following serial numbers already exist") + msg = _("The following serial numbers already exist or are invalid") msg += " : " msg += ",".join([str(e) for e in existing]) diff --git a/InvenTree/build/tasks.py b/InvenTree/build/tasks.py index fcda1f8bff..6623686155 100644 --- a/InvenTree/build/tasks.py +++ b/InvenTree/build/tasks.py @@ -144,6 +144,7 @@ def notify_overdue_build_order(bo: build.models.Build): trigger_event(event_name, build_order=bo.pk) +@InvenTree.tasks.scheduled_task(InvenTree.tasks.ScheduledTask.DAILY) def check_overdue_build_orders(): """Check if any outstanding BuildOrders have just become overdue diff --git a/InvenTree/build/test_api.py b/InvenTree/build/test_api.py index 02304b0066..33c4d541f5 100644 --- a/InvenTree/build/test_api.py +++ b/InvenTree/build/test_api.py @@ -389,7 +389,7 @@ class BuildTest(BuildAPITest): expected_code=400, ) - self.assertIn('The following serial numbers already exist : 1,2,3', str(response.data)) + self.assertIn('The following serial numbers already exist or are invalid : 1,2,3', str(response.data)) # Double check no new outputs have been created self.assertEqual(n_outputs + 5, bo.output_count) diff --git a/InvenTree/build/validators.py b/InvenTree/build/validators.py index 7e39735efb..5d529218a1 100644 --- a/InvenTree/build/validators.py +++ b/InvenTree/build/validators.py @@ -18,8 +18,9 @@ def validate_build_order_reference_pattern(pattern): def validate_build_order_reference(value): - """Validate that the BuildOrder reference field matches the required pattern""" + """Validate that the BuildOrder reference field matches the required pattern.""" from build.models import Build + # If we get to here, run the "default" validation routine Build.validate_reference_field(value) diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index b9dc4559f3..582503ae6f 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -886,6 +886,13 @@ class InvenTreeSetting(BaseInvenTreeSetting): ] }, + 'INVENTREE_BACKUP_ENABLE': { + 'name': _('Automatic Backup'), + 'description': _('Enable automatic backup of database and media files'), + 'validator': bool, + 'default': True, + }, + 'BARCODE_ENABLE': { 'name': _('Barcode Support'), 'description': _('Enable barcode scanner support'), @@ -1132,6 +1139,13 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'validator': bool, }, + 'SERIAL_NUMBER_GLOBALLY_UNIQUE': { + 'name': _('Globally Unique Serials'), + 'description': _('Serial numbers for stock items must be globally unique'), + 'default': False, + 'validator': bool, + }, + 'STOCK_BATCH_CODE_TEMPLATE': { 'name': _('Batch Code Template'), 'description': _('Template for generating default batch codes for stock items'), diff --git a/InvenTree/common/notifications.py b/InvenTree/common/notifications.py index 6122f181c7..1d4e7ae47b 100644 --- a/InvenTree/common/notifications.py +++ b/InvenTree/common/notifications.py @@ -12,7 +12,7 @@ import InvenTree.helpers from common.models import NotificationEntry, NotificationMessage from InvenTree.ready import isImportingData from plugin import registry -from plugin.models import NotificationUserSetting +from plugin.models import NotificationUserSetting, PluginConfig from users.models import Owner logger = logging.getLogger('inventree') @@ -397,6 +397,28 @@ def trigger_notification(obj, category=None, obj_ref='pk', **kwargs): logger.info(f"No possible users for notification '{category}'") +def trigger_superuser_notification(plugin: PluginConfig, msg: str): + """Trigger a notification to all superusers. + + Args: + plugin (PluginConfig): Plugin that is raising the notification + msg (str): Detailed message that should be attached + """ + users = get_user_model().objects.filter(is_superuser=True) + + trigger_notification( + plugin, + 'inventree.plugin', + context={ + 'error': plugin, + 'name': _('Error raised by plugin'), + 'message': msg, + }, + targets=users, + delivery_methods=set([UIMessageNotification]), + ) + + def deliver_notification(cls: NotificationMethod, obj, category: str, targets, context: dict): """Send notification with the provided class. diff --git a/InvenTree/common/tasks.py b/InvenTree/common/tasks.py index 56fd3fb04f..e600136560 100644 --- a/InvenTree/common/tasks.py +++ b/InvenTree/common/tasks.py @@ -5,9 +5,12 @@ from datetime import datetime, timedelta from django.core.exceptions import AppRegistryNotReady +from InvenTree.tasks import ScheduledTask, scheduled_task + logger = logging.getLogger('inventree') +@scheduled_task(ScheduledTask.DAILY) def delete_old_notifications(): """Remove old notifications from the database. diff --git a/InvenTree/common/tests.py b/InvenTree/common/tests.py index 2313164935..9720508d10 100644 --- a/InvenTree/common/tests.py +++ b/InvenTree/common/tests.py @@ -9,10 +9,10 @@ from django.core.cache import cache from django.test import Client, TestCase from django.urls import reverse -from InvenTree.api_tester import InvenTreeAPITestCase +from InvenTree.api_tester import InvenTreeAPITestCase, PluginMixin from InvenTree.helpers import InvenTreeTestCase, str2bool from plugin import registry -from plugin.models import NotificationUserSetting, PluginConfig +from plugin.models import NotificationUserSetting from .api import WebhookView from .models import (ColorTheme, InvenTreeSetting, InvenTreeUserSetting, @@ -540,7 +540,7 @@ class NotificationUserSettingsApiTest(InvenTreeAPITestCase): self.assertEqual(str(test_setting), 'NOTIFICATION_METHOD_MAIL (for testuser): True') -class PluginSettingsApiTest(InvenTreeAPITestCase): +class PluginSettingsApiTest(PluginMixin, InvenTreeAPITestCase): """Tests for the plugin settings API.""" def test_plugin_list(self): @@ -561,11 +561,8 @@ class PluginSettingsApiTest(InvenTreeAPITestCase): def test_valid_plugin_slug(self): """Test that an valid plugin slug runs through.""" - # load plugin configs - fixtures = PluginConfig.objects.all() - if not fixtures: - registry.reload_plugins() - fixtures = PluginConfig.objects.all() + # Activate plugin + registry.set_plugin_state('sample', True) # get data url = reverse('api-plugin-setting-detail', kwargs={'plugin': 'sample', 'key': 'API_KEY'}) diff --git a/InvenTree/config_template.yaml b/InvenTree/config_template.yaml index 538a832f21..9ad0fed6e5 100644 --- a/InvenTree/config_template.yaml +++ b/InvenTree/config_template.yaml @@ -1,4 +1,8 @@ +# Secret key for backend +# Use the environment variable INVENTREE_SECRET_KEY_FILE +#secret_key_file: '/etc/inventree/secret_key.txt' + # Database backend selection - Configure backend database settings # Documentation: https://inventree.readthedocs.io/en/latest/start/config/ @@ -22,6 +26,13 @@ database: # HOST: Database host address (if required) # PORT: Database host port (if required) + # --- Database settings --- + #ENGINE: sampleengine + #NAME: '/path/to/database' + #USER: sampleuser + #PASSWORD: samplepassword + #HOST: samplehost + #PORT: sampleport # --- Example Configuration - MySQL --- #ENGINE: mysql @@ -105,8 +116,8 @@ sentry_enabled: False # Set this variable to True to enable InvenTree Plugins # Alternatively, use the environment variable INVENTREE_PLUGINS_ENABLED plugins_enabled: False -#plugin_file: /path/to/plugins.txt -#plugin_dir: /path/to/plugins/ +#plugin_file: '/path/to/plugins.txt' +#plugin_dir: '/path/to/plugins/' # Allowed hosts (see ALLOWED_HOSTS in Django settings documentation) # A list of strings representing the host/domain names that this Django site can serve. @@ -131,6 +142,9 @@ cors: # STATIC_ROOT is the local filesystem location for storing static files #static_root: '/home/inventree/data/static' +# BACKUP_DIR is the local filesystem location for storing backups +#backup_dir: '/home/inventree/data/backup' + # Background worker options background: workers: 4 diff --git a/InvenTree/locale/cs/LC_MESSAGES/django.po b/InvenTree/locale/cs/LC_MESSAGES/django.po index 27c388be98..0f7568d0fe 100644 --- a/InvenTree/locale/cs/LC_MESSAGES/django.po +++ b/InvenTree/locale/cs/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -25,22 +25,22 @@ msgstr "API endpoint nebyl nalezen" msgid "Error details can be found in the admin panel" msgstr "Podrobnosti o chybě lze nalézt v panelu administrace" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Zadejte datum" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "Duplicitní výrobní číslo: {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "Vyplněno neplatné množství" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Nevyplněné výrobní číslo" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "Neplatná skupina: {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "Neplatná/nevyplněná skupina {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "Nenalezena žádná výrobní čísla" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "Chybějící soubor" msgid "Missing external link" msgstr "Chybějící externí odkaz" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "Vyberte soubor k přiložení" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "Vyberte soubor k přiložení" msgid "Link" msgstr "Odkaz" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "Odkaz na externí URL" @@ -234,10 +223,10 @@ msgstr "Komentář" msgid "File comment" msgstr "Komentář k souboru" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "Chyba při přejmenování souboru" msgid "Invalid choice" msgstr "Neplatný výběr" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "Název" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "Název" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "Chyba serveru" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "Musí být platné číslo" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "Čeština" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "Němčina" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "Řečtina" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "Angličtina" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "Španělština" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "Španělština (Mexiko)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "Farsi / Perština" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "Francouzština" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "Hebrejština" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "Maďarština" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "Italština" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "Japonština" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "Korejština" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "Nizozemština" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "Norština" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "Polština" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "Portugalština" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "Portugalština (Brazilská)" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "Ruština" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "Švédština" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "Thajština" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "Turečtina" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "Vietnamština" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "Čínština" @@ -688,33 +677,24 @@ msgstr "" msgid "Production" msgstr "" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "Neplatný kód měny" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "" @@ -888,16 +868,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "" @@ -919,7 +899,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "" @@ -930,9 +910,9 @@ msgstr "" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "" @@ -943,7 +923,7 @@ msgstr "" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "" @@ -1008,13 +988,13 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "" msgid "Source stock item" msgstr "" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "" msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" +#: common/models.py:890 +msgid "Automatic Backup" msgstr "" #: common/models.py:891 -msgid "Enable barcode scanner support" +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:897 -msgid "Barcode Webcam Support" +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 +msgid "Barcode Support" msgstr "" #: common/models.py:898 -msgid "Allow barcode scanning via webcam in browser" +msgid "Enable barcode scanner support" msgstr "" #: common/models.py:904 -msgid "IPN Regex" +msgid "Barcode Webcam Support" msgstr "" #: common/models.py:905 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:911 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" +msgid "Enable registration" msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" +msgid "Email required" msgstr "" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "" @@ -2867,9 +2867,9 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "" @@ -3157,7 +3157,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "Činnost nebyla specifikována" msgid "No matching action found" msgstr "Nebyla nalezena odpovídající činnost" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "Pro data čárového kódu nebyla nalezena shoda" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "Pro data čárového kódu byla nalezena shoda" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/da/LC_MESSAGES/django.po b/InvenTree/locale/da/LC_MESSAGES/django.po index 2601845408..e32d20bf0c 100644 --- a/InvenTree/locale/da/LC_MESSAGES/django.po +++ b/InvenTree/locale/da/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:14\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -25,22 +25,22 @@ msgstr "API endpoint ikke fundet" msgid "Error details can be found in the admin panel" msgstr "Fejloplysninger kan findes i admin panelet" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Angiv dato" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "" msgid "Link" msgstr "" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "" @@ -234,10 +223,10 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "" @@ -688,33 +677,24 @@ msgstr "" msgid "Production" msgstr "" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "" @@ -888,16 +868,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "" @@ -919,7 +899,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "" @@ -930,9 +910,9 @@ msgstr "" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "" @@ -943,7 +923,7 @@ msgstr "" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "" @@ -1008,13 +988,13 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "" msgid "Source stock item" msgstr "" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "" msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" +#: common/models.py:890 +msgid "Automatic Backup" msgstr "" #: common/models.py:891 -msgid "Enable barcode scanner support" +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:897 -msgid "Barcode Webcam Support" +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 +msgid "Barcode Support" msgstr "" #: common/models.py:898 -msgid "Allow barcode scanning via webcam in browser" +msgid "Enable barcode scanner support" msgstr "" #: common/models.py:904 -msgid "IPN Regex" +msgid "Barcode Webcam Support" msgstr "" #: common/models.py:905 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:911 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" +msgid "Enable registration" msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" +msgid "Email required" msgstr "" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "" @@ -2867,9 +2867,9 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "" @@ -3157,7 +3157,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index 2eb87b2be7..6e4124cdee 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: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -25,22 +25,22 @@ msgstr "API-Endpunkt nicht gefunden" msgid "Error details can be found in the admin panel" msgstr "Fehlerdetails finden Sie im Admin-Panel" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Datum eingeben" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "Remote-Server gab leere Antwort zurück" msgid "Supplied URL is not a valid image file" msgstr "Angegebene URL ist kein gültiges Bild" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "Doppelte Seriennummer: {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Keine Seriennummer angegeben" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Ungültiger Gruppenbereich: {g}" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "Ungültige Gruppe: {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Ungültige Gruppensequenz: {g}" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "Ungültige/Keine Gruppe {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "Keine Seriennummern gefunden" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Anzahl der eindeutigen Seriennummern ({s}) muss mit der Anzahl ({q}) übereinstimmen" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "Entferne HTML-Tags von diesem Wert" @@ -200,7 +189,7 @@ msgstr "Fehlende Datei" msgid "Missing external link" msgstr "Fehlender externer Link" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "Datei zum Anhängen auswählen" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "Datei zum Anhängen auswählen" msgid "Link" msgstr "Link" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "Link zu einer externen URL" @@ -234,10 +223,10 @@ msgstr "Kommentar" msgid "File comment" msgstr "Datei-Kommentar" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "Fehler beim Umbenennen" msgid "Invalid choice" msgstr "Ungültige Auswahl" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "Name" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "Name" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "Serverfehler" msgid "An error has been logged by the server." msgstr "Ein Fehler wurde vom Server protokolliert." -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "Muss eine gültige Nummer sein" @@ -425,103 +414,103 @@ 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/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "Tschechisch" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "Dänisch" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "Deutsch" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "Griechisch" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "Englisch" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "Spanisch" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "Spanisch (Mexikanisch)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "Persisch" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "Französisch" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "Hebräisch" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "Ungarisch" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "Italienisch" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "Japanisch" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "Koreanisch" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "Niederländisch" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "Norwegisch" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "Polnisch" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "Portugiesisch" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "Portugiesisch (Brasilien)" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "Russisch" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "Schwedisch" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "Thailändisch" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "Türkisch" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "Vietnamesisch" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "Chinesisch" @@ -688,33 +677,24 @@ msgstr "Gegen Bestellung empfangen" msgid "Production" msgstr "in Arbeit" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "Kein gültiger Währungscode" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "Ungültiger Buchstabe im Teilenamen" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "IPN muss zu Regex-Muster {pat} passen" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "Referenz muss zu Regex-Muster {pattern} passen" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "Überschuss-Wert darf nicht negativ sein" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "Überschuss darf 100% nicht überschreiten" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "Ungültiger Wert für Ausschuss" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "Bauauftragsreferenz" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "Auftrag Referenz" msgid "SalesOrder to which this build is allocated" msgstr "Bestellung, die diesem Bauauftrag zugewiesen ist" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "Quell-Lagerort" @@ -888,16 +868,16 @@ msgstr "Bauauftrags-Status" msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "Losnummer" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "Erstelldatum" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "Fertigstellungsdatum" @@ -919,7 +899,7 @@ msgstr "Fertigstellungsdatum" msgid "completed by" msgstr "Fertiggestellt von" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "Aufgegeben von" @@ -930,9 +910,9 @@ msgstr "Nutzer der diesen Bauauftrag erstellt hat" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "Verantwortlicher Benutzer" @@ -943,7 +923,7 @@ msgstr "Nutzer der für diesen Bauauftrag zuständig ist" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "Externer Link" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "Ausgewähltes Bestands-Objekt nicht in Stückliste für Teil '{p}' gefunden" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "Bauauftrag" @@ -1008,13 +988,13 @@ msgstr "Bauauftrag" msgid "Build to allocate parts" msgstr "Bauauftrag starten um Teile zuzuweisen" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "Lagerartikel" msgid "Source stock item" msgstr "Quell-Lagerartikel" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "Quell-Lagerartikel" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "Installiere in" msgid "Destination stock item" msgstr "Ziel-Lagerartikel" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "Endprodukt" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "Endprodukt stimmt nicht mit übergeordnetem Bauauftrag überein" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "Endprodukt entspricht nicht dem Teil des Bauauftrags" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "Dieses Endprodukt wurde bereits fertiggestellt" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "Dieses Endprodukt ist nicht vollständig zugewiesen" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "Menge der Endprodukte angeben" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ganzzahl erforderlich da die Stückliste nachverfolgbare Teile enthält" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "Seriennummer" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "Seriennummer für dieses Endprodukt eingeben" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "Seriennummern automatisch zuweisen" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" -msgstr "Folgende Seriennummern existieren bereits" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" +msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "Eine Liste von Endprodukten muss angegeben werden" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "Eine Liste von Endprodukten muss angegeben werden" msgid "Location" msgstr "Lagerort" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "Lagerort für fertige Endprodukte" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "Status" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "Unvollständige Zuweisung akzeptieren" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "Endprodukte fertigstellen, auch wenn Bestand nicht fertig zugewiesen wurde" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "Zugewiesenen Bestand entfernen" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "Abzug aller Lagerbestände, die diesem Build bereits zugewiesen wurden" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "Unfertige Endprodukte entfernen" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "Lösche alle noch nicht abgeschlossenen Endprodukte" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "Nicht zugewiesene akzeptieren" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Akzeptieren, dass Lagerartikel diesem Bauauftrag nicht vollständig zugewiesen wurden" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "Benötigter Bestand wurde nicht vollständig zugewiesen" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "Unvollständig Zuweisung akzeptieren" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "Akzeptieren, dass die erforderliche Anzahl der Bauaufträge nicht abgeschlossen ist" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "Bauauftrag hat unvollständige Aufbauten" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "Stücklisten-Position" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "Endprodukt" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen" -#: build/serializers.py:651 +#: build/serializers.py:654 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:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Verfügbare Menge ({q}) überschritten" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "Für Zuweisung von verfolgten Teilen muss ein Endprodukt angegeben sein" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Endprodukt kann bei Zuweisung nicht-verfolgter Teile nicht angegeben werden" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "Dieser Lagerbestand wurde bereits diesem Endprodukt zugewiesen" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lagerort, von dem Teile bezogen werden sollen (leer lassen, um sie von jedem Lagerort zu nehmen)" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "Lagerort ausschließen" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "Lagerartikel vom ausgewählten Ort ausschließen" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "Wechselbares Lagerbestand" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagerartikel an mehreren Standorten können austauschbar verwendet werden" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "Ersatzbestand" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "Zuordnung von Ersatzteilen erlauben" @@ -1400,7 +1380,7 @@ msgstr "Bestand wurde Bauauftrag noch nicht vollständig zugewiesen" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "Losnummer" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "Erstellt" @@ -1510,7 +1490,7 @@ msgstr "Unter-Bauaufträge" msgid "Allocate Stock to Build" msgstr "Bestand Bauauftrag zuweisen" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "Bestandszuordnung aufheben" @@ -1631,7 +1611,7 @@ msgstr "Zuordnung abgeschlossen" msgid "All untracked stock items have been allocated" msgstr "Alle nicht verfolgten Lagerartikel wurden zugewiesen" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "Neuer Bauauftrag" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 +#: common/models.py:890 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:891 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 msgid "Barcode Support" msgstr "Bacode-Feature verwenden" -#: common/models.py:891 +#: common/models.py:898 msgid "Enable barcode scanner support" msgstr "Barcode-Scanner Unterstützung" -#: common/models.py:897 +#: common/models.py:904 msgid "Barcode Webcam Support" msgstr "Barcode Webcam-Unterstützung" -#: common/models.py:898 +#: common/models.py:905 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode-Scannen über Webcam im Browser erlauben" -#: common/models.py:904 +#: common/models.py:911 msgid "IPN Regex" msgstr "IPN Regex" -#: common/models.py:905 +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "RegEx Muster für die Zuordnung von Teil-IPN" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "Ändern von IPN erlaubt" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "Ändern der IPN während des Bearbeiten eines Teils erlaubt" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "Teil-Stückliste kopieren" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "Stückliste von Teil kopieren wenn das Teil dupliziert wird " -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "Teil-Parameter kopieren" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "Parameter-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "Teil-Testdaten kopieren" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "Test-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "Kategorie-Parametervorlage kopieren" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "Vorlage" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "Teile sind standardmäßig Vorlagen" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "Baugruppe" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "Komponente" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "Teile können standardmäßig in Baugruppen benutzt werden" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "Kaufbar" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "Verkäuflich" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "Artikel sind grundsätzlich verkaufbar" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "Nachverfolgbar" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "Artikel sind grundsätzlich verfolgbar" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "Virtuell" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "Teile sind grundsätzlich virtuell" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "Import in Ansichten anzeigen" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "Importassistent in einigen Teil-Ansichten anzeigen" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "Preis in Formularen anzeigen" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "Teilpreis in einigen Formularen anzeigen" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "Preis in Stückliste anzeigen" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "Preisinformationen in Stücklisten Tabellen einbeziehen" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "Preisverlauf anzeigen" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "Historische Preise für Teil anzeigen" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "Verwandte Teile anzeigen" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "Verwandte Teile eines Teils anzeigen" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "Ausgangsbestand erstellen" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "Ausgangsbestand beim Erstellen von Teilen erstellen" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "Interne Preise" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "Interne Preise für Teile aktivieren" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "Interner Preis als Stückliste-Preis" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "Interner Preis (falls vorhanden) in Stücklisten-Preisberechnungen verwenden" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "Anzeigeformat für Teilenamen" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "Format für den Namen eines Teiles" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "Labeldruck aktivieren" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "Labeldruck über die Website aktivieren" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "Label Bild DPI" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "Berichte aktivieren" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "Berichterstellung aktivieren" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "Entwickler-Modus" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "Berichte im Entwickler-Modus generieren (als HTML)" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "Seitengröße" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "Standardseitenformat für PDF-Bericht" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "Testberichte aktivieren" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "Erstellung von Test-Berichten aktivieren" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "Testberichte anhängen" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Beim Drucken eines Testberichts dem zugehörigen Lagerbestand eine Kopie des Testberichts beifügen" -#: common/models.py:1136 +#: common/models.py:1143 +msgid "Globally Unique Serials" +msgstr "" + +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" +msgstr "" + +#: common/models.py:1150 msgid "Batch Code Template" msgstr "Losnummer Vorlage" -#: common/models.py:1137 +#: common/models.py:1151 msgid "Template for generating default batch codes for stock items" msgstr "Vorlage für die Generierung von Standard-Losnummern für Lagerbestände" -#: common/models.py:1142 +#: common/models.py:1156 msgid "Stock Expiry" msgstr "Bestands-Ablauf" -#: common/models.py:1143 +#: common/models.py:1157 msgid "Enable stock expiry functionality" msgstr "Ablaufen von Bestand ermöglichen" -#: common/models.py:1149 +#: common/models.py:1163 msgid "Sell Expired Stock" msgstr "Abgelaufenen Bestand verkaufen" -#: common/models.py:1150 +#: common/models.py:1164 msgid "Allow sale of expired stock" msgstr "Verkauf von abgelaufenem Bestand erlaubt" -#: common/models.py:1156 +#: common/models.py:1170 msgid "Stock Stale Time" msgstr "Bestands-Stehzeit" -#: common/models.py:1157 +#: common/models.py:1171 msgid "Number of days stock items are considered stale before expiring" msgstr "Anzahl an Tagen, an denen Bestand als abgestanden markiert wird, bevor sie ablaufen" -#: common/models.py:1159 +#: common/models.py:1173 msgid "days" msgstr "Tage" -#: common/models.py:1164 +#: common/models.py:1178 msgid "Build Expired Stock" msgstr "Abgelaufenen Bestand verbauen" -#: common/models.py:1165 +#: common/models.py:1179 msgid "Allow building with expired stock" msgstr "Verbauen von abgelaufenen Bestand erlaubt" -#: common/models.py:1171 +#: common/models.py:1185 msgid "Stock Ownership Control" msgstr "Bestands-Eigentümerkontrolle" -#: common/models.py:1172 +#: common/models.py:1186 msgid "Enable ownership control over stock locations and items" msgstr "Eigentümerkontrolle für Lagerorte und Teile aktivieren" -#: common/models.py:1178 +#: common/models.py:1192 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1179 +#: common/models.py:1193 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1184 +#: common/models.py:1198 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1185 +#: common/models.py:1199 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1191 +#: common/models.py:1205 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1192 +#: common/models.py:1206 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1198 +#: common/models.py:1212 msgid "Sales Order Default Shipment" msgstr "Auftrag Standardsendung" -#: common/models.py:1199 +#: common/models.py:1213 msgid "Enable creation of default shipment with sales orders" msgstr "Erstelle eine Standardsendung für Aufträge" -#: common/models.py:1205 +#: common/models.py:1219 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1206 +#: common/models.py:1220 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1213 +#: common/models.py:1227 msgid "Enable password forgot" msgstr "Passwort vergessen aktivieren" -#: common/models.py:1214 +#: common/models.py:1228 msgid "Enable password forgot function on the login pages" msgstr "Passwort-vergessen-Funktion auf den Anmeldeseiten aktivieren" -#: common/models.py:1220 +#: common/models.py:1234 msgid "Enable registration" msgstr "Anmeldung erlauben" -#: common/models.py:1221 +#: common/models.py:1235 msgid "Enable self-registration for users on the login pages" msgstr "Selbstregistrierung für Benutzer auf den Anmeldeseiten aktivieren" -#: common/models.py:1227 +#: common/models.py:1241 msgid "Enable SSO" msgstr "SSO aktivieren" -#: common/models.py:1228 +#: common/models.py:1242 msgid "Enable SSO on the login pages" msgstr "SSO auf den Anmeldeseiten aktivieren" -#: common/models.py:1234 +#: common/models.py:1248 msgid "Email required" msgstr "Email-Adresse erforderlich" -#: common/models.py:1235 +#: common/models.py:1249 msgid "Require user to supply mail on signup" msgstr "Benutzer müssen bei der Registrierung eine E-Mail angeben" -#: common/models.py:1241 +#: common/models.py:1255 msgid "Auto-fill SSO users" msgstr "SSO-Benutzer automatisch ausfüllen" -#: common/models.py:1242 +#: common/models.py:1256 msgid "Automatically fill out user-details from SSO account-data" msgstr "Benutzer-Details automatisch aus SSO-Konto ausfüllen" -#: common/models.py:1248 +#: common/models.py:1262 msgid "Mail twice" msgstr "E-Mail zweimal" -#: common/models.py:1249 +#: common/models.py:1263 msgid "On signup ask users twice for their mail" msgstr "Bei der Registrierung den Benutzer zweimal nach der E-Mail-Adresse fragen" -#: common/models.py:1255 +#: common/models.py:1269 msgid "Password twice" msgstr "Passwort zweimal" -#: common/models.py:1256 +#: common/models.py:1270 msgid "On signup ask users twice for their password" msgstr "Bei der Registrierung den Benutzer zweimal nach dem Passwort fragen" -#: common/models.py:1262 +#: common/models.py:1276 msgid "Group on signup" msgstr "Gruppe bei Registrierung" -#: common/models.py:1263 +#: common/models.py:1277 msgid "Group to which new users are assigned on registration" msgstr "Gruppe der neue Benutzer bei der Registrierung zugewiesen werden" -#: common/models.py:1269 +#: common/models.py:1283 msgid "Enforce MFA" msgstr "MFA erzwingen" -#: common/models.py:1270 +#: common/models.py:1284 msgid "Users must use multifactor security." msgstr "Benutzer müssen Multifaktor-Authentifizierung verwenden." -#: common/models.py:1276 +#: common/models.py:1290 msgid "Check plugins on startup" msgstr "Plugins beim Start prüfen" -#: common/models.py:1277 +#: common/models.py:1291 msgid "Check that all plugins are installed on startup - enable in container enviroments" msgstr "Beim Start überprüfen, ob alle Plugins installiert sind - Für Container aktivieren" -#: common/models.py:1284 +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "URL-Integration aktivieren" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "Plugins zum Hinzufügen von URLs aktivieren" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "Navigations-Integration aktivieren" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "Plugins zur Integration in die Navigation aktivieren" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "App-Integration aktivieren" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "Plugins zum Hinzufügen von Apps aktivieren" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "Terminplan-Integration aktivieren" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "Geplante Aufgaben aktivieren" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "Ereignis-Integration aktivieren" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "Plugins ermöglichen auf interne Ereignisse zu reagieren" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird nicht beachtet)" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "Abonnierte Teile anzeigen" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "Zeige abonnierte Teile auf der Startseite" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "Abonnierte Kategorien anzeigen" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "Zeige abonnierte Teilkategorien auf der Startseite" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "Neueste Teile anzeigen" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "Zeige neueste Teile auf der Startseite" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "Aktuelle Teile-Stände" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "Anzahl der neusten Teile auf der Startseite" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "Nicht validierte Stücklisten anzeigen" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "Zeige Stücklisten, die noch nicht validiert sind, auf der Startseite" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "Neueste Bestandänderungen anzeigen" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "Zeige zuletzt geänderte Lagerbestände auf der Startseite" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "aktueller Bestand" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "Anzahl des geänderten Bestands auf der Startseite" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "Niedrigen Bestand anzeigen" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "Zeige geringen Bestand auf der Startseite" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "Lerren Bestand anzeigen" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "Zeige aufgebrauchte Lagerartikel auf der Startseite" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "Benötigten Bestand anzeigen" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "Zeige Bestand für Bauaufträge auf der Startseite" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "Abgelaufenen Bestand anzeigen" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "Zeige abgelaufene Lagerbestände auf der Startseite" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "Alten Bestand anzeigen" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "Zeige überfällige Lagerartikel auf der Startseite" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "Ausstehende Bauaufträge anzeigen" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "Zeige ausstehende Bauaufträge auf der Startseite" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "Zeige überfällige Bauaufträge" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "Zeige überfällige Bauaufträge auf der Startseite" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "Ausstehende POs anzeigen" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "Zeige ausstehende POs auf der Startseite" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "Überfällige POs anzeigen" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "Zeige überfällige POs auf der Startseite" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "Ausstehende SOs anzeigen" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "Zeige ausstehende SOs auf der Startseite" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "Überfällige SOs anzeigen" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "Zeige überfällige SOs auf der Startseite" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "Label inline anzeigen" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "PDF-Labels im Browser anzeigen, anstatt als Datei herunterzuladen" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "Berichte inline anzeigen" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "PDF-Berichte im Browser anzeigen, anstatt als Datei herunterzuladen" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "Teile suchen" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "Teile in der Suchvorschau anzeigen" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "Zuliefererteile durchsuchen" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "Zuliefererteile in der Suchvorschau anzeigen" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "Herstellerteile durchsuchen" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "Herstellerteile in der Suchvorschau anzeigen" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "Inaktive Teile ausblenden" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "Inaktive Teile in der Suchvorschau ausblenden" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "Kategorien durchsuchen" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "Teilekategorien in der Suchvorschau anzeigen" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "Bestand durchsuchen" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "Lagerartikel in Suchvorschau anzeigen" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "Nicht verfügbare Artikel ausblenden" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "Nicht verfügbare Lagerartikel aus der Suchvorschau ausschließen" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "Lagerorte durchsuchen" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "Lagerorte in Suchvorschau anzeigen" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "Firmen durchsuchen" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "Firmen in der Suchvorschau anzeigen" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "Bestellungen durchsuchen" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "Bestellungen in der Suchvorschau anzeigen" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "Inaktive Bestellungen ausblenden" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inaktive Bestellungen in der Suchvorschau ausblenden" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "Aufträge durchsuchen" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "Aufträge in der Suchvorschau anzeigen" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "Inaktive Aufträge ausblenden" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "Inaktive Aufträge in der Suchvorschau ausblenden" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "Anzahl Suchergebnisse" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "Anzahl der Ergebnisse, die in der Vorschau pro Sektion angezeigt werden sollen" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "zeige Bestand in Eingabemasken" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "Zeige den verfügbaren Bestand in einigen Eingabemasken" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "Esc-Taste schließt Formulare" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "Benutze die Esc-Taste, um Formulare zu schließen" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "Fixierter Navigationsleiste" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "Position der Navigationsleiste am oberen Bildschirmrand fixieren" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "Datumsformat" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "Bevorzugtes Format für die Anzeige von Daten" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Teilzeitplanung" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "Zeige Zeitplanung für Teile" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "Preis" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "Stückpreis für die angegebene Anzahl" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "Endpunkt" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "Endpunkt, an dem dieser Webhook empfangen wird" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "Name für diesen Webhook" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "Name für diesen Webhook" msgid "Active" msgstr "Aktiv" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "Ist dieser Webhook aktiv" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "Token" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "Token für Zugang" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "Geheimnis" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "Shared Secret für HMAC" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "Nachrichten-ID" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "Eindeutige Kennung für diese Nachricht" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "Host" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "Host von dem diese Nachricht empfangen wurde" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "Kopfzeile" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "Header dieser Nachricht" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "Body" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "Body dieser Nachricht" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "Endpunkt, über den diese Nachricht empfangen wurde" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "Bearbeitet" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "Wurde die Arbeit an dieser Nachricht abgeschlossen?" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "Anlaufstelle" msgid "Link to external company information" msgstr "Link auf externe Firmeninformation" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "Bild" @@ -2867,9 +2867,9 @@ msgstr "Währung" msgid "Default currency used for this company" msgstr "Standard-Währung für diese Firma" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "Basisteil" @@ -2928,7 +2928,7 @@ msgstr "Parametername" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "Wert" msgid "Parameter value" msgstr "Parameterwert" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "Notiz" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "Basiskosten" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "Verpackungen" @@ -3031,7 +3031,7 @@ msgstr "Packungsmenge" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "Vielfache" @@ -3042,8 +3042,8 @@ msgstr "Mehrere bestellen" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "Bild von URL herunterladen" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "Bild hochladen" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "Bild herunterladen" @@ -3157,7 +3157,7 @@ msgstr "Neues Zuliefererteil anlegen" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "Neues Zuliefererteil" @@ -3186,7 +3186,7 @@ msgstr "Herstellerteile" msgid "Create new manufacturer part" msgstr "Neues Herstellerteil anlegen" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "Neues Herstellerteil" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "Neuer Auftrag" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "Zugeordneter Bestand" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "Zulieferer" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "Zuliefererteil entfernen" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "Parameter löschen" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "Parameter hinzufügen" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "Zugewiesene Lagerartikel" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "Empfangen" msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "Kontrolliert von" msgid "User who checked this shipment" msgstr "Benutzer, der diese Sendung kontrolliert hat" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "Sendung" @@ -3909,7 +3909,7 @@ msgstr "Kann Lagerartikel keiner Zeile ohne Teil hinzufügen" msgid "Allocation quantity cannot exceed stock quantity" msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein" @@ -3949,11 +3949,11 @@ msgstr "Währung" msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "Lieferant muss mit der Bestellung übereinstimmen" msgid "Purchase order must match supplier" msgstr "Die Bestellung muss mit dem Lieferant übereinstimmen" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "Position" @@ -3989,7 +3989,7 @@ msgstr "Position" msgid "Line item does not match purchase order" msgstr "Position stimmt nicht mit Kaufauftrag überein" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "Zielort für empfangene Teile auswählen" @@ -4013,51 +4013,51 @@ msgstr "Barcode ist bereits in Verwendung" msgid "An integer quantity must be provided for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "Positionen müssen angegeben werden" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "Ziel-Lagerort muss angegeben werden" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "Keine Sendungsdetails angegeben" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "Position ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "Seriennummern zum Zuweisen eingeben" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "Sendung wurde bereits versandt" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "Sendung ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "Folgende Serienummern konnten nicht gefunden werden" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "Folgende Seriennummern sind bereits zugewiesen" @@ -4070,11 +4070,11 @@ msgstr "Überfällige Bestellung" msgid "Purchase order {po} is now overdue" msgstr "Bestellung {po} ist jetzt überfällig" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Auftrag {so} ist jetzt überfällig" @@ -4200,8 +4200,8 @@ msgstr "Zulieferer-Teil auswählen" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "Ausstehende Sendungen" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "Aktionen" @@ -4398,8 +4398,8 @@ msgstr "Standort für anfänglichen Bestand angeben" msgid "This field is required" msgstr "Dieses Feld ist erforderlich" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "Standard-Lagerort" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "Verfügbarer Bestand" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "Symbol" msgid "Icon (optional)" msgstr "Symbol (optional)" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Teil-Kategorie" @@ -4475,56 +4475,48 @@ msgstr "Ungültige Auswahl für übergeordnetes Teil" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "Teil '{p1}' wird in Stückliste für Teil '{p2}' benutzt (rekursiv)" -#: part/models.py:628 -msgid "Next available serial numbers are" -msgstr "Nächste verfügbare Seriennummern wären" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" +msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "Nächste verfügbare Seriennummer ist" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "Die neuste Seriennummer ist" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "Doppelte IPN in den Teil-Einstellungen nicht erlaubt" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "Name des Teils" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "Ist eine Vorlage" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "Ist dieses Teil eine Vorlage?" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "Ist dieses Teil eine Variante eines anderen Teils?" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "Variante von" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "Beschreibung des Teils" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "Schlüsselwörter" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" msgid "Category" msgstr "Kategorie" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "IPN (Interne Produktnummer)" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "Interne Teilenummer" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "Revisions- oder Versionsnummer" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "Version" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "Standard Zulieferer" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "Standard Zuliefererteil" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "Standard Ablaufzeit" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "Minimaler Bestand" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "Minimal zulässiger Bestand" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "Stock Keeping Units (SKU) für dieses Teil" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "Kann dieses Teil zum Bauauftrag von anderen genutzt werden?" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "Hat dieses Teil Tracking für einzelne Objekte?" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "Kann dieses Teil an Kunden verkauft werden?" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "Ist dieses Teil aktiv?" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "Ist dieses Teil virtuell, wie zum Beispiel eine Software oder Lizenz?" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "Teile-Notizen" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "Prüfsumme der Stückliste gespeichert" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "Stückliste kontrolliert von" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "BOM Kontrolldatum" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "Erstellungs-Nutzer" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "Mehrere verkaufen" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "Test-Vorlagen können nur für verfolgbare Teile angelegt werden" -#: part/models.py:2322 +#: part/models.py:2336 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:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "Benötigt" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "Erfordert Wert" -#: part/models.py:2361 +#: part/models.py:2375 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:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "Muss für diesen Test ein Anhang für das Test-Ergebnis hinzugefügt werden?" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "Ungültiges Zeichen im Vorlagename ({c})" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "Name des Parameters" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "Einheit des Parameters" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "Ausgangsteil" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "Wert" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "Parameter Wert" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "Standard-Wert" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "Teilnummer oder Teilname" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "Teil-ID" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "Eindeutige Teil-ID" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "Name des Teils" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "Teil-ID" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "IPN-Wert des Teils" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "Stufe" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "Stücklistenebene" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "Untergeordnetes Teil" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "Optional" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Überschuss" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Geschätzter Ausschuss (absolut oder prozentual)" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "Prüfsumme" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "Geerbt" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Diese Stücklisten-Position wird in die Stücklisten von Teil-Varianten vererbt" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "Varianten zulassen" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Bestand von Varianten kann für diese Stücklisten-Position verwendet werden" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "Zuliefererteil muss festgelegt sein" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "Stücklisten Ersatzteile" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "Ersatzteil kann nicht identisch mit dem Hauptteil sein" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "Übergeordnete Stücklisten Position" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "Ersatzteil" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "Teil 1" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "Teil 2" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "Doppelte Beziehung existiert bereits" @@ -5065,12 +5057,12 @@ msgstr "Teile (inklusive Unter-Kategorien)" msgid "Create new part" msgstr "Neues Teil anlegen" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "Neues Teil" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "Optionen" @@ -5194,7 +5186,7 @@ msgstr "Stückliste" msgid "Export actions" msgstr "Export-Aktionen" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "Stückliste exportieren" @@ -5214,70 +5206,63 @@ msgstr "Stückliste kopieren" msgid "Validate BOM" msgstr "Stückliste überprüfen" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "Neue Stücklisten-Position" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "Stücklisten-Position hinzufügen" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "Baugruppen" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "Gefertigte Teile" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "Bauauftragszuweisungen" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "Zulieferer" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "Teil-Hersteller" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "Herstellerteile löschen" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "Stücklisten-Position anlegen" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "verknüpftes Teil" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "verknüpftes Teil hinzufügen" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "Testergebnis-Vorlage hinzufügen" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "Stückpreis Einkauf - %(currency)s" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "Stückpreis Differenz - %(currency)s" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "Stückpreis Zulieferer - %(currency)s" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "Stückpreis - %(currency)s" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "Inaktiv" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "Teildetails anzeigen" @@ -5445,7 +5430,7 @@ msgstr "Zu Bauaufträgen zugeordnet" msgid "Allocated to Sales Orders" msgstr "Zur Bestellung zugeordnet" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "Herstellbar" @@ -5459,28 +5444,28 @@ msgstr "Im Bau" msgid "Minimum stock level" msgstr "Minimaler Bestand" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "letzte Seriennummer" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "Nach Seriennummer suchen" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "Berechnen" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "Keine passenden Bilder gefunden" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "Teildetails ausblenden" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "Gesamtkosten" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "Keine Zulieferer-Preise verfügbar" @@ -5602,7 +5587,7 @@ msgstr "Verkaufspreis anzeigen" msgid "Calculation parameters" msgstr "Berechnungsparameter" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "Zuliefererkosten" @@ -5744,23 +5729,23 @@ msgstr "Keine Aktion angegeben" msgid "No matching action found" msgstr "Keine passende Aktion gefunden" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "barcode_data Parameter angeben" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "Keine Treffer für Barcode" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "Treffer für Barcode gefunden" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "Ist das Plugin aktiv" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "Plugin" @@ -5838,6 +5823,20 @@ msgstr "Kein Autor gefunden" msgid "No date found" msgstr "Kein Datum gefunden" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "Bestellungen aktivieren" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "Lagerartikel Test-Bericht" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "Testergebnisse" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "Test" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "Ergebnis" @@ -6066,241 +6065,237 @@ msgstr "Gültiges Teil muss angegeben werden" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Seriennummern können für nicht verfolgbare Teile nicht angegeben werden" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "Besitzer" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "Besitzer auswählen" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "Ein Lagerartikel mit dieser Seriennummer existiert bereits" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "Teile-Typ ('{pf}') muss {pe} sein" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "Anzahl muss für Objekte mit Seriennummer 1 sein" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Seriennummer kann nicht gesetzt werden wenn die Anzahl größer als 1 ist" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "Teil kann nicht zu sich selbst gehören" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "Teil muss eine Referenz haben wenn is_building wahr ist" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "Referenz verweist nicht auf das gleiche Teil" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "Eltern-Lagerartikel" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "Basis-Teil" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Bestand-Lagerort" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "Die Verpackung dieses Lagerartikel ist gelagert in" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "verbaut in" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "Ist dieses Teil in einem anderen verbaut?" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "Losnummer für diesen Lagerartikel" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "Bestand" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "Quellbau" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "Bauauftrag für diesen Lagerartikel" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "Quelle Bestellung" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "Bestellung für diesen Lagerartikel" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "Ziel-Auftrag" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "Ablaufdatum" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Ablaufdatum für Lagerartikel. Bestand wird danach als abgelaufen gekennzeichnet" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "Löschen wenn leer" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "Diesen Lagerartikel löschen wenn der Bestand aufgebraucht ist" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "Lagerartikel-Notizen" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "Preis für eine Einheit bei Einkauf" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "In Teil umgewandelt" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "Anzahl darf nicht die verfügbare Anzahl überschreiten ({n})" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "Seriennummern muss eine Liste von Ganzzahlen sein" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "Seriennummern {exists} existieren bereits" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "Artikel wurde einem Kundenauftrag zugewiesen" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "Lagerartikel ist in anderem Element verbaut" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "Lagerartikel enthält andere Artikel" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "Artikel wurde einem Kunden zugewiesen" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "Lagerartikel wird aktuell produziert" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "Nachverfolgbare Lagerartikel können nicht zusammengeführt werden" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "Artikel duplizeren" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "Lagerartikel müssen auf dasselbe Teil verweisen" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "Lagerartikel müssen auf dasselbe Lieferantenteil verweisen" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "Status-Codes müssen zusammenpassen" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "Lagerartikel kann nicht bewegt werden, da kein Bestand vorhanden ist" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "Eintrags-Notizen" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "Wert muss für diesen Test angegeben werden" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "Anhang muss für diesen Test hochgeladen werden" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "Name des Tests" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "Testergebnis" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "Test Notizen" @@ -6325,7 +6320,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:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "Ziel-Bestand" @@ -6337,99 +6332,99 @@ msgstr "Optionales Notizfeld" msgid "Serial numbers cannot be assigned to this part" msgstr "Seriennummern können diesem Teil nicht zugewiesen werden" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "Seriennummern existieren bereits" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "Lagerartikel für Installation auswählen" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "Lagerartikel ist nicht verfügbar" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "Ausgewähltes Teil ist nicht in der Stückliste" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "Ziel Lagerort für unverbautes Objekt" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr " Transaktionsnotizen hinzufügen (optional)" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "Teil muss verkaufbar sein" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "Artikel ist einem Kundenauftrag zugeordnet" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "Artikel ist einem Fertigungsauftrag zugeordnet" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "Kunde zum Zuweisen von Lagerartikel" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "Ausgewählte Firma ist kein Kunde" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "Notizen zur Lagerzuordnung" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "Eine Liste der Lagerbestände muss angegeben werden" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "Notizen zur Lagerartikelzusammenführung" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "Unterschiedliche Lieferanten erlauben" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Lieferanten erlauben" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "Unterschiedliche Status erlauben" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Status-Codes erlauben" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "Mindestens zwei Lagerartikel müssen angegeben werden" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "Primärschlüssel Lagerelement" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "Bestandsbewegungsnotizen" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "Verfügbare Menge" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "Kein Lagerort gesetzt" @@ -7084,11 +7079,6 @@ msgstr "Stufe" msgid "Message" msgstr "Meldung" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "Plugin-Details für %(name)s" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "Plugin-Informationen" @@ -7806,7 +7796,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:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "Benötigte Menge" @@ -8011,15 +8001,19 @@ msgstr "In Lagerorten buchen" msgid "Barcode does not match a valid location" msgstr "Barcode entspricht keinem Lagerort" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "Stücklisten-Position anlegen" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "Zeilendaten anzeigen" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "Zeilendaten" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "Zeilendaten" msgid "Close" msgstr "Schliessen" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "Vorlage einer Stückliste herunterladen" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "Format" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "Dateiformat auswählen" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "Multilevel Stückliste" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "Stücklisten-Daten für Untergruppen einbeziehen" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "Ebenen" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "Maximale Anzahl an Ebenen für Stückliste-Export auswählen (0 = alle Ebenen)" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "Parameter-Daten einschließen" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "Teil-Parameter in Stückliste-Export einschließen" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "Bestand einschließen" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "Teil-Bestand in Stückliste-Export einschließen" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "Herstellerdaten einschließen" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "Teil-Herstellerdaten in Stückliste-Export einschließen" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "Zulieferer einschließen" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "Zulieferer-Daten in Stückliste-Export einschließen" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "Ersatzteil entfernen" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "Wählen Sie ein neues Ersatzteil aus und fügen Sie sie mit den folgenden Eingaben hinzu" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "Sind Sie sicher, dass Sie dieses Ersatzteil entfernen möchten?" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "Ersatzteil entfernen" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "Ersatzteil hinzufügen" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "Stücklisten Ersatzteile bearbeiten" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "Alle ausgewählte Stücklistenpositionen werden gelöscht" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "Ausgewählte Stücklistenpositionen löschen?" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "Stückliste für Bauteile laden" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "Ersatzteile verfügbar" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "Varianten erlaubt" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "Kein Lagerbestand verfügbar" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "Beinhaltet Variante und Ersatzbestand" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "Beinhaltet Variantenbestand" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "Enthält Ersatzbestand" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "Ersatzteile" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "Stückliste anzeigen" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "Kaufpreisspanne" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "Durchschnittlicher Kaufpreis" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "Stücklisten-Position kontrollieren" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "Diese Position wurde kontrolliert" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "Ersatzteile bearbeiten" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "Stücklisten-Position bearbeiten" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "Stücklisten-Position löschen" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "Keine Stücklisten-Position(en) gefunden" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "benötigtes Teil" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "Geerbt von übergeordneter Stückliste" @@ -8330,158 +8324,158 @@ msgstr "Standort nicht angegeben" msgid "No active build outputs found" msgstr "Keine aktiven Endprodukte gefunden" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "Bestand zuteilen" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "Keine nachverfolgten Stücklisten-Einträge für diesen Bauauftrag" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "Abgeschlossene Tests" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "Keine erforderlichen Tests für diesen Bauauftrag" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "Bestands-Zuordnung bearbeiten" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "Bestands-Zuordnung löschen" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "Zuordnung bearbeiten" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "Zuordnung entfernen" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "Ersatzteile verfügbar" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "Anzahl pro" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "Unzureichender Bestand verfügbar" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "Ausreichender Bestand verfügbar" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "Zugeordnet" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "Bestand bauen" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "Bestand bestellen" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "Bestand zuweisen" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "Teile auswählen" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "Sie müssen mindestens ein Teil auswählen" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "Alle Teile zugeordnet" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "Alle ausgewählten Teile wurden vollständig zugeordnet" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "Wählen Sie den Quellort aus (leer lassen um von allen Standorten zu nehmen)" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "Lagerartikel für Bauauftrag zuweisen" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "Keine passenden Lagerstandorte" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "Keine passenden Lagerbestände" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "Automatische Lagerzuordnung" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "Lagerartikel werden automatisch diesem Bauauftrag zugewiesen, entsprechend den angegebenen Richtlinien" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "Wenn ein Standort angegeben ist, wird der Lagerbestand nur von diesem Ort zugewiesen" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "Wenn der Lagerbestand als austauschbar gilt, wird er vom ersten Standort zugewiesen, an dem er gefunden wird" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "Wenn ein Ersatzbestand erlaubt ist, wird es dort verwendet, wo kein Vorrat des Primärteils gefunden werden kann" -#: templates/js/translated/build.js:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "Lagerartikel zuordnen" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "Keine Bauaufträge passen zur Anfrage" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "Auswählen" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "Bauauftrag ist überfällig" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "Fortschritt" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "Keine Benutzerinformation" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "Keine Teile zugeordnet zu" @@ -8660,32 +8654,32 @@ msgstr "Dieses Formular offen lassen" msgid "Enter a valid number" msgstr "Gib eine gültige Nummer ein" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Fehler in Formular" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "Keine Ergebnisse gefunden" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "Suche" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "Eingabe leeren" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "Dateispalte" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "Feldname" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "Spalten auswählen" diff --git a/InvenTree/locale/el/LC_MESSAGES/django.po b/InvenTree/locale/el/LC_MESSAGES/django.po index a36471ab97..c77d85de2b 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: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -25,22 +25,22 @@ msgstr "Το API endpoint δε βρέθηκε" msgid "Error details can be found in the admin panel" msgstr "Μπορείτε να βρείτε λεπτομέρειες σφάλματος στον πίνακα διαχείρισης" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Εισάγετε ημερομηνία" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "Ο διακομιστής επέστρεψε σφάλμα %1$d %2$s" msgid "Supplied URL is not a valid image file" msgstr "Το URL δεν είναι έγκυρο αρχείο εικόνας" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "Διπλότυπο serial number: {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "Μη έγκυρη ποσότητα" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Κενό σειριακό αριθμό συμβολοσειράς" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Μη έγκυρο εύρος ομάδας: {g}" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "Μη έγκυρη ομάδα: {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Μη έγκυρη ακολουθία ομάδας: {g}" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "Μη έγκυρη ομάδα {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "Δεν βρέθηκαν σειριακοί αριθμοί" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Ο αριθμός μοναδικών σειριακών αριθμών ({s}) πρέπει να αντιστοιχεί στην ποσότητα ({q})" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "Αφαιρέστε τα HTML tags από την τιμή που εισάγατε" @@ -200,7 +189,7 @@ msgstr "Το αρχείο λείπει" msgid "Missing external link" msgstr "Λείπει ο εξωτερικός σύνδεσμος" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "Επιλέξτε αρχείο για επισύναψη" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "Επιλέξτε αρχείο για επισύναψη" msgid "Link" msgstr "Σύνδεσμος" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL" @@ -234,10 +223,10 @@ msgstr "Σχόλιο" msgid "File comment" msgstr "Σχόλιο αρχείου" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "Σφάλμα κατά τη μετονομασία" msgid "Invalid choice" msgstr "Μη έγκυρη επιλογή" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "Όνομα" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "Όνομα" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "Σφάλμα διακομιστή" msgid "An error has been logged by the server." msgstr "Ένα σφάλμα έχει καταγραφεί από το διακομιστή." -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "Πρέπει να είναι αριθμός" @@ -425,103 +414,103 @@ msgstr "Διεύθυνση URL του αρχείου απομακρυσμένη msgid "Downloading images from remote URL is not enabled" msgstr "Η λήψη εικόνων από απομακρυσμένο URL δεν είναι ενεργοποιημένη" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "Τσέχικα" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "Γερμανικά" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "Ελληνικά" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "Αγγλικά" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "Ισπανικά" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "Ισπανικά (Μεξικό)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "Φαρσί / Περσικά" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "Γαλλικά" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "Εβραϊκά" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "Ούγγρικα" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "Ιταλικά" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "Ιαπωνικά" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "Κορεάτικα" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "Dutch" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "Νορβηγικά" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "Πολωνικά" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "Πορτογαλικά" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "Πορτογαλικά (Βραζιλίας)" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "Ρωσικά" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "Σουηδικά" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "Ταϊλανδέζικα" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "Τούρκικα" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "Βιετναμέζικα" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "Κινέζικα" @@ -688,33 +677,24 @@ msgstr "Λήφθηκε έναντι εντολής αγοράς" msgid "Production" msgstr "Παραγωγή" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "Μη έγκυρος κωδικός συναλλάγματος" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "Μη έγκυρος χαρακτήρας στο όνομα εξαρτήματος" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "Το IPN πρέπει να ταιριάζει με το μοτίβο regex {pat}" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "Η αναφορά πρέπει να ταιριάζει με το μοτίβο {pattern}" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "Η μέση τιμή δεν πρέπει να είναι αρνητική" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "Η μέση τιμή δεν πρέπει να υπερβαίνει το 100%" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "Μη έγκυρη τιμή για υπέρβαση" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "Αναφορά Παραγγελίας Κατασκευής" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "BuildOrder στην οποία έχει δοθεί αυτή η κατα #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "Κωδικός Παραγγελίας Πωλήσεων" msgid "SalesOrder to which this build is allocated" msgstr "SalesOrder στην οποία έχει διατεθεί αυτό το build" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "Τοποθεσία Προέλευσης" @@ -888,16 +868,16 @@ msgstr "Κατάσταση Κατασκευής" msgid "Build status code" msgstr "Κωδικός κατάστασης κατασκευής" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "Κωδικός Παρτίδας" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "Κωδικός παρτίδας για αυτήν την κατασκευή" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "Ημερομηνία Δημιουργίας" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ημερομηνία ολοκλήρωσης της κατασκευής. Η κατασκευή θα καθυστερήσει μετά από αυτή την ημερομηνία." #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "Ημερομηνία ολοκλήρωσης" @@ -919,7 +899,7 @@ msgstr "Ημερομηνία ολοκλήρωσης" msgid "completed by" msgstr "ολοκληρώθηκε από" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "Εκδόθηκε από" @@ -930,9 +910,9 @@ msgstr "Χρήστης που εξέδωσε αυτήν την παραγγελ #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "Υπεύθυνος" @@ -943,7 +923,7 @@ msgstr "Υπεύθυνος για αυτή την παραγγελία κατα #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "Εξωτερικοί σύνδεσμοι" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "Το επιλεγμένο αντικείμενο αποθέματος δεν βρέθηκε στο BOM" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "Κατασκευή" @@ -1008,13 +988,13 @@ msgstr "Κατασκευή" msgid "Build to allocate parts" msgstr "Κατασκευή για εκχώρηση τμημάτων" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "Στοιχείο Αποθέματος" msgid "Source stock item" msgstr "Στοιχείο πηγαίου αποθέματος" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "Στοιχείο πηγαίου αποθέματος" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "Εγκατάσταση σε" msgid "Destination stock item" msgstr "Αποθήκη προορισμού" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "Κατασκευή Εξόδου" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "Το εξερχόμενο μέρος δεν ταιριάζει με το μέρος BuildOrder" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "Αυτή η έξοδος κατασκευής δεν έχει εκχωρηθεί πλήρως" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται για ανιχνεύσιμα μέρη" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται, καθώς ο λογαριασμός των υλικών περιέχει ανιχνεύσιμα μέρη" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "Σειριακοί αριθμοί" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" +#: common/models.py:890 +msgid "Automatic Backup" msgstr "" #: common/models.py:891 -msgid "Enable barcode scanner support" +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:897 -msgid "Barcode Webcam Support" +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 +msgid "Barcode Support" msgstr "" #: common/models.py:898 -msgid "Allow barcode scanning via webcam in browser" +msgid "Enable barcode scanner support" msgstr "" #: common/models.py:904 -msgid "IPN Regex" +msgid "Barcode Webcam Support" msgstr "" #: common/models.py:905 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:911 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" +msgid "Enable registration" msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" +msgid "Email required" msgstr "" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "" @@ -2867,9 +2867,9 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "" @@ -3157,7 +3157,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index 2efc0c684e..125f05801b 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: 2022-10-07 02:25+0000\n" +"POT-Creation-Date: 2022-10-16 13:10+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,7 +41,7 @@ msgstr "" #: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 #: stock/serializers.py:922 stock/serializers.py:1054 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -306,8 +306,8 @@ msgstr "" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -426,103 +426,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "" @@ -779,8 +779,8 @@ msgstr "" #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -817,10 +817,10 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -849,7 +849,7 @@ msgid "SalesOrder to which this build is allocated" msgstr "" #: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "" @@ -912,7 +912,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "" @@ -920,7 +920,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "" @@ -933,7 +933,7 @@ msgstr "" #: order/templates/order/order_base.html:185 #: order/templates/order/sales_order_base.html:183 part/models.py:942 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "" @@ -1000,7 +1000,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "" @@ -1015,7 +1015,7 @@ msgstr "" #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1034,8 +1034,8 @@ msgstr "" #: company/templates/company/supplier_part.html:341 order/models.py:911 #: order/models.py:1437 order/serializers.py:1209 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2657 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1046,11 +1046,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1149,7 +1149,7 @@ msgstr "" #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1165,7 +1165,7 @@ msgstr "" #: build/serializers.py:373 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 @@ -1401,7 +1401,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1491,7 +1491,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1511,7 +1511,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1632,7 +1632,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1887,7 +1887,7 @@ msgstr "" msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" @@ -2870,7 +2870,7 @@ msgstr "" #: company/models.py:248 company/models.py:482 stock/models.py:544 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -3043,8 +3043,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3158,7 +3158,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3187,7 +3187,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3243,7 +3243,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3290,13 +3290,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3321,7 +3321,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -4201,8 +4201,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4324,8 +4324,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4414,7 +4414,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4789,7 +4789,7 @@ msgid "BOM quantity for this BOM item" msgstr "" #: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" @@ -4799,8 +4799,8 @@ msgstr "" msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2667 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" @@ -4834,7 +4834,7 @@ msgid "BOM line checksum" msgstr "" #: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" @@ -4845,7 +4845,7 @@ msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" #: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" @@ -5066,12 +5066,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5195,7 +5195,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5215,70 +5215,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5446,7 +5439,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5508,7 +5501,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5603,7 +5596,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5745,23 +5738,23 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5823,7 +5816,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -6015,7 +6008,7 @@ msgstr "" #: report/templates/report/inventree_test_report_base.html:79 #: stock/models.py:594 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6619,7 +6612,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7085,11 +7078,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7161,7 +7149,7 @@ msgstr "" msgid "Report Settings" msgstr "" -#: templates/InvenTree/settings/setting.html:39 +#: templates/InvenTree/settings/setting.html:37 msgid "No value set" msgstr "" @@ -7809,7 +7797,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8014,15 +8002,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8030,180 +8022,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8333,158 +8325,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index 85975a6cd4..830fd531e3 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: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -25,22 +25,22 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "" msgid "Link" msgstr "" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "" @@ -234,10 +223,10 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "" @@ -688,33 +677,24 @@ msgstr "" msgid "Production" msgstr "" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "" @@ -888,16 +868,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "" @@ -919,7 +899,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "" @@ -930,9 +910,9 @@ msgstr "" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "" @@ -943,7 +923,7 @@ msgstr "" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "" @@ -1008,13 +988,13 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "" msgid "Source stock item" msgstr "" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "" msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" +#: common/models.py:890 +msgid "Automatic Backup" msgstr "" #: common/models.py:891 -msgid "Enable barcode scanner support" +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:897 -msgid "Barcode Webcam Support" +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 +msgid "Barcode Support" msgstr "" #: common/models.py:898 -msgid "Allow barcode scanning via webcam in browser" +msgid "Enable barcode scanner support" msgstr "" #: common/models.py:904 -msgid "IPN Regex" +msgid "Barcode Webcam Support" msgstr "" #: common/models.py:905 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:911 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" +msgid "Enable registration" msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" +msgid "Email required" msgstr "" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "" @@ -2867,9 +2867,9 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "" @@ -3157,7 +3157,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/InvenTree/locale/es_MX/LC_MESSAGES/django.po index 2efc0c684e..125f05801b 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: 2022-10-07 02:25+0000\n" +"POT-Creation-Date: 2022-10-16 13:10+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,7 +41,7 @@ msgstr "" #: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 #: stock/serializers.py:922 stock/serializers.py:1054 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -306,8 +306,8 @@ msgstr "" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -426,103 +426,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "" @@ -779,8 +779,8 @@ msgstr "" #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -817,10 +817,10 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -849,7 +849,7 @@ msgid "SalesOrder to which this build is allocated" msgstr "" #: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "" @@ -912,7 +912,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "" @@ -920,7 +920,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "" @@ -933,7 +933,7 @@ msgstr "" #: order/templates/order/order_base.html:185 #: order/templates/order/sales_order_base.html:183 part/models.py:942 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "" @@ -1000,7 +1000,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "" @@ -1015,7 +1015,7 @@ msgstr "" #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1034,8 +1034,8 @@ msgstr "" #: company/templates/company/supplier_part.html:341 order/models.py:911 #: order/models.py:1437 order/serializers.py:1209 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2657 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1046,11 +1046,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1149,7 +1149,7 @@ msgstr "" #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1165,7 +1165,7 @@ msgstr "" #: build/serializers.py:373 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 @@ -1401,7 +1401,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1491,7 +1491,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1511,7 +1511,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1632,7 +1632,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1887,7 +1887,7 @@ msgstr "" msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" @@ -2870,7 +2870,7 @@ msgstr "" #: company/models.py:248 company/models.py:482 stock/models.py:544 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -3043,8 +3043,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3158,7 +3158,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3187,7 +3187,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3243,7 +3243,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3290,13 +3290,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3321,7 +3321,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -4201,8 +4201,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4324,8 +4324,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4414,7 +4414,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4789,7 +4789,7 @@ msgid "BOM quantity for this BOM item" msgstr "" #: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" @@ -4799,8 +4799,8 @@ msgstr "" msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2667 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" @@ -4834,7 +4834,7 @@ msgid "BOM line checksum" msgstr "" #: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" @@ -4845,7 +4845,7 @@ msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" #: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" @@ -5066,12 +5066,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5195,7 +5195,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5215,70 +5215,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5446,7 +5439,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5508,7 +5501,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5603,7 +5596,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5745,23 +5738,23 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5823,7 +5816,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -6015,7 +6008,7 @@ msgstr "" #: report/templates/report/inventree_test_report_base.html:79 #: stock/models.py:594 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6619,7 +6612,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7085,11 +7078,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7161,7 +7149,7 @@ msgstr "" msgid "Report Settings" msgstr "" -#: templates/InvenTree/settings/setting.html:39 +#: templates/InvenTree/settings/setting.html:37 msgid "No value set" msgstr "" @@ -7809,7 +7797,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8014,15 +8002,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8030,180 +8022,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8333,158 +8325,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" diff --git a/InvenTree/locale/fa/LC_MESSAGES/django.po b/InvenTree/locale/fa/LC_MESSAGES/django.po index 666f701fa7..393261f89f 100644 --- a/InvenTree/locale/fa/LC_MESSAGES/django.po +++ b/InvenTree/locale/fa/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -25,22 +25,22 @@ msgstr "Address e API peida nashod" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "" msgid "Link" msgstr "" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "" @@ -234,10 +223,10 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "" @@ -688,33 +677,24 @@ msgstr "" msgid "Production" msgstr "" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "" @@ -888,16 +868,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "" @@ -919,7 +899,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "" @@ -930,9 +910,9 @@ msgstr "" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "" @@ -943,7 +923,7 @@ msgstr "" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "" @@ -1008,13 +988,13 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "" msgid "Source stock item" msgstr "" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "" msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" +#: common/models.py:890 +msgid "Automatic Backup" msgstr "" #: common/models.py:891 -msgid "Enable barcode scanner support" +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:897 -msgid "Barcode Webcam Support" +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 +msgid "Barcode Support" msgstr "" #: common/models.py:898 -msgid "Allow barcode scanning via webcam in browser" +msgid "Enable barcode scanner support" msgstr "" #: common/models.py:904 -msgid "IPN Regex" +msgid "Barcode Webcam Support" msgstr "" #: common/models.py:905 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:911 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" +msgid "Enable registration" msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" +msgid "Email required" msgstr "" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "" @@ -2867,9 +2867,9 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "" @@ -3157,7 +3157,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "هیچ عملیات کاربر-محوری، مشخص نشده است" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/fr/LC_MESSAGES/django.po b/InvenTree/locale/fr/LC_MESSAGES/django.po index ec65cf19f9..775f7fda14 100644 --- a/InvenTree/locale/fr/LC_MESSAGES/django.po +++ b/InvenTree/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:43\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -25,22 +25,22 @@ msgstr "Point de terminaison de l'API introuvable" msgid "Error details can be found in the admin panel" msgstr "Les détails de l'erreur peuvent être trouvées dans le panneau d'administration" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Entrer la date" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "Le serveur distant a renvoyé une réponse vide" msgid "Supplied URL is not a valid image file" msgstr "L'URL fournie n'est pas un fichier image valide" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "Dupliquer le numéro : {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "Quantité fournie invalide" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Chaîne de numéro de série vide" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Plage de groupe invalide : {g}" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "Groupe invalide : {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Séquence de groupe invalide : {g}" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "Invalide/aucun groupe {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "Aucun numéro de série trouvé" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Le nombre de numéros de série uniques ({s}) doit correspondre à la quantité ({q})" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "Fichier manquant" msgid "Missing external link" msgstr "Lien externe manquant" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "Sélectionnez un fichier à joindre" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "Sélectionnez un fichier à joindre" msgid "Link" msgstr "Lien" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "Lien vers une url externe" @@ -234,10 +223,10 @@ msgstr "Commentaire" msgid "File comment" msgstr "Commentaire du fichier" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "Erreur lors du renommage du fichier" msgid "Invalid choice" msgstr "Choix invalide" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "Nom" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "Nom" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "Erreur serveur" msgid "An error has been logged by the server." msgstr "Une erreur a été enregistrée par le serveur." -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "Doit être un nombre valide" @@ -425,103 +414,103 @@ 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/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "Tchèque" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "Danois" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "Allemand" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "Grec" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "Anglais" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "Espagnol" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "Espagnol (Mexique)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "Farsi / Perse" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "Français" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "Hébreu" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "Hongrois" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "Italien" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "Japonais" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "Coréen" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "Néerlandais" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "Norvégien" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "Polonais" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "Portugais" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "Portugais (Brésilien)" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "Russe" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "Suédois" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "Thaïlandais" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "Turc" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "Vietnamien" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "Chinois" @@ -688,33 +677,24 @@ msgstr "Reçu contre bon de commande" msgid "Production" msgstr "Fabrication" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "Code de devise invalide" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "Caractère invalide dans le nom de la pièce" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "L'IPN doit correspondre au modèle de regex {pat}" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "La référence doit correspondre au modèle {pattern}" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "La valeur de surplus ne doit pas être négative" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "Le surplus ne doit pas dépasser 100%" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "Valeur invalide pour le dépassement" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "Référence de l' Ordre de Fabrication" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "BuildOrder associé a cette fabrication" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "Bon de commande de référence" msgid "SalesOrder to which this build is allocated" msgstr "Commande de vente à laquelle cette construction est allouée" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "Emplacement d'origine" @@ -888,16 +868,16 @@ msgstr "État de la construction" msgid "Build status code" msgstr "Code de statut de construction" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "Code de lot" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "Code de lot pour ce build output" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "Date de création" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "Date cible pour l'achèvement de la construction. La construction sera en retard après cette date." #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "Date d'achèvement" @@ -919,7 +899,7 @@ msgstr "Date d'achèvement" msgid "completed by" msgstr "achevé par" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "Émis par" @@ -930,9 +910,9 @@ msgstr "Utilisateur ayant émis cette commande de construction" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "Responsable" @@ -943,7 +923,7 @@ msgstr "Utilisateur responsable de cette commande de construction" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "Lien Externe" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "L'article du stock sélectionné n'a pas été trouvé dans la BOM" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "Assemblage" @@ -1008,13 +988,13 @@ msgstr "Assemblage" msgid "Build to allocate parts" msgstr "Construction à laquelle allouer des pièces" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "Article en stock" msgid "Source stock item" msgstr "Stock d'origine de l'article" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "Stock d'origine de l'article" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "Installer dans" msgid "Destination stock item" msgstr "Stock de destination de l'article" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "Sortie d'assemblage" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "L'ordre de production ne correspond pas à l'ordre parent" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "La pièce en sortie ne correspond pas à la pièce de l'ordre de construction" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "Cet ordre de production a déjà été produit" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "Cet ordre de production n'est pas complètement attribué" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "Entrer la quantité désiré pour la fabrication" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "Quantité entière requise pour les pièces à suivre" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantité entière requise, car la facture de matériaux contient des pièces à puce" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "Numéros de série" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "Entrer les numéros de séries pour la fabrication" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "Allouer automatiquement les numéros de série" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "Affecter automatiquement les éléments requis avec les numéros de série correspondants" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" -msgstr "Le numéro de série suivant existe déjà" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" +msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "Une liste d'ordre de production doit être fourni" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "Une liste d'ordre de production doit être fourni" msgid "Location" msgstr "Emplacement" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "Emplacement des ordres de production achevés" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "État" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "Accepter l'allocation incomplète" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "Compléter les sorties si le stock n'a pas été entièrement alloué" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "Supprimer le stock alloué" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "Soustraire tout stock qui a déjà été alloué à cette construction" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "Supprimer les sorties incomplètes" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "Supprimer toutes les sorties de construction qui n'ont pas été complétées" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "Accepter comme consommé par cet ordre de construction" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "Certains articles en stock ont été suralloués" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "Accepter les non-alloués" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accepter les articles de stock qui n'ont pas été complètement alloués à cette ordre de production" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "Le stock requis n'a pas encore été totalement alloué" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "Accepter les incomplèts" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "Accepter que tous les ordres de production n'aient pas encore été achevés" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "La quantité nécessaire n'a pas encore été complétée" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "L'ordre de production a des sorties incomplètes" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "Article de la nomenclature" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "Sortie d'assemblage" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "La sortie de la construction doit pointer vers la même version" -#: build/serializers.py:651 +#: build/serializers.py:654 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:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantité disponible ({q}) dépassée" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "La sortie de construction doit être spécifiée pour l'allocation des pièces tracées" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "La sortie de la compilation ne peut pas être spécifiée pour l'allocation des pièces non suivies" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "Cet article de stock a déjà été alloué à cette sortie de construction" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "Les éléments d'allocation doivent être fournis" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Emplacement de stock où les pièces doivent être fournies (laisser vide pour les prendre à partir de n'importe quel endroit)" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "Emplacements exclus" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "Exclure les articles en stock de cet emplacement sélectionné" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "Stock interchangeable" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Les articles en stock à plusieurs emplacements peuvent être utilisés de manière interchangeable" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "Stock de substitution" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "Autoriser l'allocation des pièces de remplacement" @@ -1400,7 +1380,7 @@ msgstr "Le stock n'a pas été entièrement alloué à cet ordre de construction #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "Lot" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "Créé le" @@ -1510,7 +1490,7 @@ msgstr "Commandes filles" msgid "Allocate Stock to Build" msgstr "Allouer le stock à la commande" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "Désallouer le stock" @@ -1631,7 +1611,7 @@ msgstr "Allocation terminée" msgid "All untracked stock items have been allocated" msgstr "Tous les articles de stock non suivis ont été alloués" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "Nouvel ordre de construction" @@ -1804,853 +1784,869 @@ msgstr "Profondeur de l'arborescence" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Profondeur de l'arborescence par défaut. Les niveaux plus profonds peuvent être chargés au fur et à mesure qu'ils sont nécessaires." -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 +#: common/models.py:890 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:891 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 msgid "Barcode Support" msgstr "Support des code-barres" -#: common/models.py:891 +#: common/models.py:898 msgid "Enable barcode scanner support" msgstr "Activer le support du scanner de code-barres" -#: common/models.py:897 +#: common/models.py:904 msgid "Barcode Webcam Support" msgstr "Prise en charge de la webcam code-barres" -#: common/models.py:898 +#: common/models.py:905 msgid "Allow barcode scanning via webcam in browser" msgstr "Autoriser la numérisation de codes-barres via la webcam dans le navigateur" -#: common/models.py:904 +#: common/models.py:911 msgid "IPN Regex" msgstr "Regex IPN" -#: common/models.py:905 +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "Expression régulière pour la correspondance avec l'IPN de la Pièce" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "Autoriser les IPN dupliqués" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "Permettre à plusieurs pièces de partager le même IPN" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "Autoriser l'édition de l'IPN" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "Permettre de modifier la valeur de l'IPN lors de l'édition d'une pièce" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "Copier les données de la pièce" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "Copier les données des paramètres de la pièce" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "Copier les données de test de la pièce" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "Copier les données de test par défaut lors de la duplication d'une pièce" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "Copier les templates de paramètres de catégorie" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "Copier les templates de paramètres de la catégorie lors de la création d'une pièce" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "Modèle" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "Les pièces sont des templates par défaut" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "Assemblage" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "Les composantes peuvent être assemblées à partir d'autres composants par défaut" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "Composant" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "Les composantes peuvent être utilisées comme sous-composants par défaut" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "Achetable" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "Les pièces sont achetables par défaut" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "Vendable" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "Les pièces sont vendables par défaut" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "Traçable" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "Les pièces sont traçables par défaut" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "Virtuelle" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "Les pièces sont virtuelles par défaut" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "Afficher l'import dans les vues" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "Afficher l'assistant d'importation pour certaine vues de produits" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "Afficher le prix dans les formulaires" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "Afficher le prix de la pièce dans certains formulaires" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "Afficher le prix dans la BOM" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "Inclure les informations de prix dans les tableaux de la BOM" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "Historique des prix" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "Afficher l'historique des prix pour la pièce" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "Afficher les pièces connexes" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "Afficher les pièces connexes à une pièce" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "Créer un stock initial" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "Créer le stock initial lors de la création d'une pièce" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "Prix internes" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "Activer les prix internes pour les pièces" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "Prix interne comme prix nomenclature" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "Utiliser le prix interne (si définie) dans le calcul du prix nomenclature" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "Format d'affichage du nom de la pièce" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "Format pour afficher le nom de la pièce" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "Activer l'impression d'étiquettes" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "Activer l'impression d'étiquettes depuis l'interface Web" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "Étiquette image DPI" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Résolution DPI lors de la génération de fichiers image pour fournir aux plugins d'impression d'étiquettes" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "Activer les rapports" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "Activer la génération de rapports" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "Mode Débogage" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "Générer des rapports en mode debug (sortie HTML)" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "Taille de la page" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "Taille de page par défaut pour les rapports PDF" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "Activer les rapports de test" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "Activer la génération de rapports de test" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "Joindre des rapports de test" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Lors de l'impression d'un rapport de test, joignez une copie du rapport de test à l'article en stock associé" -#: common/models.py:1136 +#: common/models.py:1143 +msgid "Globally Unique Serials" +msgstr "" + +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" +msgstr "" + +#: common/models.py:1150 msgid "Batch Code Template" msgstr "Modèle de code de lot" -#: common/models.py:1137 +#: common/models.py:1151 msgid "Template for generating default batch codes for stock items" msgstr "Modèle pour générer des codes par défaut pour les articles en stock" -#: common/models.py:1142 +#: common/models.py:1156 msgid "Stock Expiry" msgstr "Expiration du stock" -#: common/models.py:1143 +#: common/models.py:1157 msgid "Enable stock expiry functionality" msgstr "Activer la fonctionnalité d'expiration du stock" -#: common/models.py:1149 +#: common/models.py:1163 msgid "Sell Expired Stock" msgstr "Vendre le stock expiré" -#: common/models.py:1150 +#: common/models.py:1164 msgid "Allow sale of expired stock" msgstr "Autoriser la vente de stock expiré" -#: common/models.py:1156 +#: common/models.py:1170 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1157 +#: common/models.py:1171 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1159 +#: common/models.py:1173 msgid "days" msgstr "jours" -#: common/models.py:1164 +#: common/models.py:1178 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1165 +#: common/models.py:1179 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1171 +#: common/models.py:1185 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1172 +#: common/models.py:1186 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1178 +#: common/models.py:1192 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1179 +#: common/models.py:1193 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1184 +#: common/models.py:1198 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1185 +#: common/models.py:1199 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1191 +#: common/models.py:1205 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1192 +#: common/models.py:1206 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1198 +#: common/models.py:1212 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1199 +#: common/models.py:1213 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1205 +#: common/models.py:1219 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1206 +#: common/models.py:1220 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1213 +#: common/models.py:1227 msgid "Enable password forgot" msgstr "Activer les mots de passe oubliés" -#: common/models.py:1214 +#: common/models.py:1228 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1220 +#: common/models.py:1234 msgid "Enable registration" msgstr "Activer les inscriptions" -#: common/models.py:1221 +#: common/models.py:1235 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1227 +#: common/models.py:1241 msgid "Enable SSO" msgstr "Activer le SSO" -#: common/models.py:1228 +#: common/models.py:1242 msgid "Enable SSO on the login pages" msgstr "Activer le SSO sur les pages de connexion" -#: common/models.py:1234 +#: common/models.py:1248 msgid "Email required" msgstr "Email requis" -#: common/models.py:1235 +#: common/models.py:1249 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1241 +#: common/models.py:1255 msgid "Auto-fill SSO users" msgstr "Saisie automatique des utilisateurs SSO" -#: common/models.py:1242 +#: common/models.py:1256 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1248 +#: common/models.py:1262 msgid "Mail twice" msgstr "Courriel en double" -#: common/models.py:1249 +#: common/models.py:1263 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1255 +#: common/models.py:1269 msgid "Password twice" msgstr "" -#: common/models.py:1256 +#: common/models.py:1270 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1262 +#: common/models.py:1276 msgid "Group on signup" msgstr "" -#: common/models.py:1263 +#: common/models.py:1277 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1269 +#: common/models.py:1283 msgid "Enforce MFA" msgstr "" -#: common/models.py:1270 +#: common/models.py:1284 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1276 +#: common/models.py:1290 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1277 +#: common/models.py:1291 msgid "Check that all plugins are installed on startup - enable in container enviroments" msgstr "" -#: common/models.py:1284 +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "Activer l'intégration de plugins" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "Activer l'intégration de plugin pour ajouter des apps" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "Clé du paramètre (doit être unique - insensible à la casse)" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "Afficher les composants suivis" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "Afficher les composants suivis sur l'écran d'accueil" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "Afficher les dernières pièces" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "Afficher les derniers composants sur la page d'accueil" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "Nombre de composants récents" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "Afficher les dernières modifications du stock" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "Afficher le stock épuisé" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "Afficher les stocks épuisés sur la page d'accueil" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "Afficher le stock nécessaire" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "Format de date" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "Format préféré pour l'affichage des dates" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "Prix" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "Actif" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "Jeton" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "Confidentiel" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "ID message" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "Identifiant unique pour ce message" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "Hôte" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "Hôte à partir duquel ce message a été reçu" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "Entête" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "En-tête de ce message" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "Corps" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "Corps de ce message" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "Le travail sur ce message est-il terminé ?" @@ -2739,6 +2735,10 @@ msgstr "Articles reçus" msgid "Items have been received against a purchase order" msgstr "Des articles d'un bon de commande ont été reçus" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "Point de contact" msgid "Link to external company information" msgstr "Lien externe vers les informations de l'entreprise" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "" @@ -2867,9 +2867,9 @@ msgstr "Devise" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "Valeur" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "Description de la pièce du fournisseur" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "Note" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "coût de base" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "Frais minimums (par exemple frais de stock)" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "Conditionnement" @@ -3031,7 +3031,7 @@ msgstr "Nombre de paquet" msgid "Unit quantity supplied in a single pack" msgstr "Nombre d'unités fournies dans un seul paquet" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "plusieurs" @@ -3042,8 +3042,8 @@ msgstr "Commande multiple" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "Télécharger l'image depuis l'URL" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "Téléphone" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "Charger une image" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "Télécharger une image" @@ -3157,7 +3157,7 @@ msgstr "Créer une nouvelle pièce fournisseur" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "Nouvelle pièce fournisseur" @@ -3186,7 +3186,7 @@ msgstr "Pièces du fabricant" msgid "Create new manufacturer part" msgstr "Créer une nouvelle pièce de fabricant" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "Nouvelle pièce de fabricant" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "Nouvelle commande de vente" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "Stock affecté" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "Fournisseurs" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "Supprimer les pièces du fournisseur" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "Supprimer les paramètres" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "Ajouter un paramètre" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "Articles en stock assignés" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "Reçu" msgid "Number of items received" msgstr "Nombre d'éléments reçus" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "Envoi" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "Devise *" msgid "Order cannot be cancelled" msgstr "La commande ne peut pas être annulée" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "Le code-barres est déjà utilisé" msgid "An integer quantity must be provided for trackable parts" msgstr "Une quantité entière doit être fournie pour les pièces tracables" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "Entrez les numéros de série à allouer" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "Aucune correspondance trouvée pour les numéros de série suivants" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "Les numéros de série suivants sont déjà alloués" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "Expéditions en attente" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Catégorie de composant" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" -msgstr "Les prochains numéros de série disponibles sont" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" +msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "Le prochain numéro de série disponible est" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "Le numéro de série le plus récent est" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dupliqué non autorisé dans les paramètres de la pièce" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "Description du composant" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "Catégorie" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "Catégorie de la pièce" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "Révision" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "Ventes multiples" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "Nom de test" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "Requis" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "Données" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "ID de composant" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Surplus" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "Composantes (incluant sous-catégories)" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "Fabricants de composants" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "Dernier numéro de série" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "Rechercher un numéro de série" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "Calculer" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "Afficher le prix de vente" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "Aucune action spécifiée" msgid "No matching action found" msgstr "Aucune action correspondante trouvée" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "Le paramètre barcode_data doit être fourni" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "Aucune correspondance trouvée pour les données du code-barres" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "Correspondance trouvée pour les données du code-barres" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "Résultat" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "Propriétaire" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "Sélectionner un propriétaire" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "Il existe déjà un article en stock avec ce numéro de série" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "La quantité doit être de 1 pour un article avec un numéro de série" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Le numéro de série ne peut pas être défini si la quantité est supérieure à 1" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "Numéro de série pour cet article" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "Les numéros de série doivent être une liste de nombres entiers" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "La quantité ne correspond pas au nombre de numéros de série" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "Les numéros de série existent déja : {exists}" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "Entrez les numéros de série pour les nouveaux articles" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "Les numéros de série ne peuvent pas être assignés à cette pièce" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "Les numéros de série existent déjà" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "Détails du plugin %(name)s" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "Informations sur le plugin" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "Quantité requise" @@ -8011,15 +8001,19 @@ msgstr "Vérifier dans l'emplacement" msgid "Barcode does not match a valid location" msgstr "Le code-barres ne correspond pas à un emplacement valide" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "Données de la rangée" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "Données de la rangée" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "Télécharger le template de la BOM" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "Sélectionner un format de fichier" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "Niveaux" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "Sélectionner le nombre maximum de niveaux de BOM à exporter (0 = tous les niveaux)" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "Inclure les données de paramètre" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "Inclure les données de paramètre de la pièce dans la BOM exporté" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "Inclure les données de stock" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "Commander des stocks" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "Pas d'informations sur l'utilisateur" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/he/LC_MESSAGES/django.po b/InvenTree/locale/he/LC_MESSAGES/django.po index a6cf936450..6aef201a9f 100644 --- a/InvenTree/locale/he/LC_MESSAGES/django.po +++ b/InvenTree/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -25,22 +25,22 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "הזן תאריך סיום" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "קבוצה שגויה: {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "קבוצה שגויה / לא נמצאה {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "מספרים סידוריים לא נמצאו" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "קובץ חסר" msgid "Missing external link" msgstr "חסר קישור חיצוני" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "בחר קובץ לצירוף" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "בחר קובץ לצירוף" msgid "Link" msgstr "קישור" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "קישור חיצוני" @@ -234,10 +223,10 @@ msgstr "הערה" msgid "File comment" msgstr "הערת קובץ" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "שגיאה בשינוי שם פריט" msgid "Invalid choice" msgstr "בחירה שגויה" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "שם" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "שם" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "המספר חייב להיות תקין" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "גרמנית" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "יוונית" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "אנגלית" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "ספרדית" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "ספרדית (מקסיקנית)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "צרפתית" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "עברית" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "איטלקית" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "יפנית" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "קוריאנית" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "הולנדית" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "נורווגית" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "פולנית" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "רוסית" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "שוודית" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "תאילנדית" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "טורקית" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "ווייטנאמית" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "סינית" @@ -688,33 +677,24 @@ msgstr "" msgid "Production" msgstr "ייצור" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "קוד מטבע לא מאושר" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "" @@ -888,16 +868,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "" @@ -919,7 +899,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "" @@ -930,9 +910,9 @@ msgstr "" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "" @@ -943,7 +923,7 @@ msgstr "" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "" @@ -1008,13 +988,13 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "" msgid "Source stock item" msgstr "" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "" msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "מספרים סידוריים" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" +#: common/models.py:890 +msgid "Automatic Backup" msgstr "" #: common/models.py:891 -msgid "Enable barcode scanner support" +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:897 -msgid "Barcode Webcam Support" +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 +msgid "Barcode Support" msgstr "" #: common/models.py:898 -msgid "Allow barcode scanning via webcam in browser" +msgid "Enable barcode scanner support" msgstr "" #: common/models.py:904 -msgid "IPN Regex" +msgid "Barcode Webcam Support" msgstr "" #: common/models.py:905 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:911 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" +msgid "Enable registration" msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" +msgid "Email required" msgstr "" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "" @@ -2867,9 +2867,9 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "" @@ -3157,7 +3157,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "לא פורטה הפעולה" msgid "No matching action found" msgstr "פעולה מבוקשת לא נמצאה" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "הפרמטר barcode_data מוכרח להיות תקין" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/hu/LC_MESSAGES/django.po b/InvenTree/locale/hu/LC_MESSAGES/django.po index 2f25aad9c9..39cf0c4e80 100644 --- a/InvenTree/locale/hu/LC_MESSAGES/django.po +++ b/InvenTree/locale/hu/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -25,22 +25,22 @@ msgstr "API funkciót nem találom" msgid "Error details can be found in the admin panel" msgstr "A hiba részleteit megtalálod az admin panelen" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Dátum megadása" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "A kiszolgáló üres választ adott" msgid "Supplied URL is not a valid image file" msgstr "A megadott URL nem egy érvényes kép fájl" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "Duplikált sorozatszám: {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "Nem megfelelő mennyiség" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Üres sorozatszám" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Érvénytelen csoport tartomány: {g}" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "Érvénytelen csoport: {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Érvénytelen csoport szekvencia: {g}" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "Érvénytelen vagy nemlétező csoport {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "Nem található sorozatszám" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "A megadott számú egyedi sorozatszám ({s}) meg kell egyezzen a darabszámmal ({q})" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "HTML tag-ek eltávolítása ebből az értékből" @@ -200,7 +189,7 @@ msgstr "Hiányzó fájl" msgid "Missing external link" msgstr "Hiányzó külső link" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "Válaszd ki a mellekelni kívánt fájlt" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "Válaszd ki a mellekelni kívánt fájlt" msgid "Link" msgstr "Link" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "Link külső URL-re" @@ -234,10 +223,10 @@ msgstr "Megjegyzés" msgid "File comment" msgstr "Leírás, bővebb infó" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "Hiba a fájl átnevezésekor" msgid "Invalid choice" msgstr "Érvénytelen választás" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "Név" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "Név" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "Kiszolgálóhiba" msgid "An error has been logged by the server." msgstr "A kiszolgáló egy hibaüzenetet rögzített." -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "Érvényes számnak kell lennie" @@ -425,103 +414,103 @@ 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/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "Cseh" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "Dán" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "Német" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "Görög" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "Angol" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "Spanyol" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "Spanyol (Mexikói)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "Fárszi/Perzsa" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "Francia" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "Héber" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "Magyar" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "Olasz" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "Japán" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "Koreai" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "Holland" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "Norvég" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "Lengyel" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "Portugál" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "Portugál (Brazíliai)" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "Orosz" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "Svéd" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "Tháj" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "Török" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "Vietnámi" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "Kínai" @@ -688,33 +677,24 @@ msgstr "Megrendelésre érkezett" msgid "Production" msgstr "Folyamatban" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "Érvénytelen pénznem kód" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "Érvénytelen karakter az alkatrész névben" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "IPN mezőnek egyeznie kell a '{pat}' mintával" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "Referenciának egyeznie kell a '{pattern}' mintával" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "Túlszállítás nem lehet negatív" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "Túlszállítás nem lehet több mint 100%" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "Érvénytelen érték a túlszállításra" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "Gyártási utasítás azonosító" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "Gyártás, amihez ez a gyártás hozzá van rendelve" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "Vevői rendelés azonosító" msgid "SalesOrder to which this build is allocated" msgstr "Vevői rendelés amihez ez a gyártás hozzá van rendelve" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "Forrás hely" @@ -888,16 +868,16 @@ msgstr "Gyártási állapot" msgid "Build status code" msgstr "Gyártás státusz kód" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "Batch kód" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "Batch kód a gyártás kimenetéhez" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "Létrehozás dátuma" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "Cél dátum a gyártás befejezéséhez. Ez után késettnek számít majd." #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "Elkészítés dátuma" @@ -919,7 +899,7 @@ msgstr "Elkészítés dátuma" msgid "completed by" msgstr "elkészítette" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "Kiállította" @@ -930,9 +910,9 @@ msgstr "Felhasználó aki ezt a gyártási utasítást kiállította" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "Felelős" @@ -943,7 +923,7 @@ msgstr "Felhasználó aki felelős ezért a gyártási utasításért" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "Külső link" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "Kiválasztott készlet tétel nem található az alkatrészjegyzékben" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "Gyártás" @@ -1008,13 +988,13 @@ msgstr "Gyártás" msgid "Build to allocate parts" msgstr "Gyártás amihez készletet foglaljunk" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "Készlet tétel" msgid "Source stock item" msgstr "Forrás készlet tétel" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "Forrás készlet tétel" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "Beépítés ebbe" msgid "Destination stock item" msgstr "Cél készlet tétel" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "Gyártás kimenet" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "Gyártási kimenet nem egyezik a szülő gyártással" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "Kimeneti alkatrész nem egyezik a gyártási utasításban lévő alkatrésszel" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "Ez a gyártási kimenet már elkészült" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "Ez a gyártási kimenet nincs teljesen lefoglalva" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "Add meg a mennyiséget a gyártás kimenetéhez" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "Mennyiségnek nullánál többnek kell lennie" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "Egész számú mennyiség szükséges az egyedi követésre kötelezett alkatrészeknél" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Egész számú mennyiség szükséges, mivel az alkatrészjegyzék egyedi követésre kötelezett alkatrészeket tartalmaz" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "Sorozatszámok" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "Add meg a sorozatszámokat a gyártás kimenetéhez" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "Sorozatszámok automatikus hozzárendelése" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "Szükséges tételek automatikus hozzárendelése a megfelelő sorozatszámokkal" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" -msgstr "A következő sorozatszámok már léteznek" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" +msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "A gyártási kimenetek listáját meg kell adni" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,160 +1137,160 @@ msgstr "A gyártási kimenetek listáját meg kell adni" msgid "Location" msgstr "Hely" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "A kész gyártási kimenetek helye" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "Állapot" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "Hiányos foglalás elfogadása" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "Kimenetek befejezése akkor is ha a készlet nem\n" "lett teljesen lefoglalva" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "Lefoglalt készlet levonása" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "Az összes lefoglalt tétel levonása a készletről" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "Befejezetlen kimenetek törlése" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "A nem befejezett gyártási kimenetek törlése" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "Gyártásban fel lett használva" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "Foglalás felszabadítása a készre jelentés előtt" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "Túlfoglalt készlet" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Hogyyan kezeljük az gyártáshoz rendelt extra készletet" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "Pár készlet tétel túl lett foglalva" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "Kiosztatlanok elfogadása" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Fogadd el hogy a készlet tételek nincsenek teljesen lefoglalva ehhez a gyártási utastáshoz" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "A szükséges készlet nem lett teljesen lefoglalva" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "Befejezetlenek elfogadása" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "Fogadd el hogy a szükséges számú gyártási kimenet nem lett elérve" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "Szükséges gyártási mennyiség nem lett elérve" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "A gyártási utasítás befejezetlen kimeneteket tartalmaz" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "Gyártás kimenet" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "A gyártási kimenetnek ugyanarra a gyártásra kell mutatnia" -#: build/serializers.py:651 +#: build/serializers.py:654 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:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "A tételnek kell legyen készlete" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Rendelkezésre álló mennyiség ({q}) túllépve" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "Gyártási kimenetet meg kell adni a követésre kötelezett alkatrészek lefoglalásához" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Gyártási kimenetet nem lehet megadni a követésre kötelezett alkatrészek lefoglalásához" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "Ez a készlet tétel már le lett foglalva ehhez a gyártási kimenethez" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "A lefoglalandó tételeket meg kell adni" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Készlet hely ahonnan az alkatrészek származnak (hagyd üresen ha bárhonnan)" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "Hely kizárása" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "Készlet tételek kizárása erről a kiválasztott helyről" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "Felcserélhető készlet" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "A különböző helyeken lévő készlet egyenrangúan felhasználható" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "Készlet helyettesítés" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "Helyettesítő alkatrészek foglalásának engedélyezése" @@ -1401,7 +1381,7 @@ msgstr "Még nincs lefoglalva a szükséges készlet" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1491,7 +1471,7 @@ msgstr "Batch" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "Létrehozva" @@ -1511,7 +1491,7 @@ msgstr "Alárendelt gyártások" msgid "Allocate Stock to Build" msgstr "Készlet foglalása gyártáshoz" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "Készlet felszabadítása" @@ -1632,7 +1612,7 @@ msgstr "Lefoglalás kész" msgid "All untracked stock items have been allocated" msgstr "A szükséges készlet már mind le lett foglalva" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "Új gyártási utasítás" @@ -1805,853 +1785,869 @@ msgstr "Fa mélység" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Alapértelmezett mélység a fa nézetekben. A mélyebb szintek betöltődnek ha szükségesek." -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 +#: common/models.py:890 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:891 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 msgid "Barcode Support" msgstr "Vonalkód támogatás" -#: common/models.py:891 +#: common/models.py:898 msgid "Enable barcode scanner support" msgstr "Vonalkód olvasó engedélyezése" -#: common/models.py:897 +#: common/models.py:904 msgid "Barcode Webcam Support" msgstr "Webkamerás vonalkód olvasás" -#: common/models.py:898 +#: common/models.py:905 msgid "Allow barcode scanning via webcam in browser" msgstr "Webkamerás kódolvasás engedélyezése a böngészőből" -#: common/models.py:904 +#: common/models.py:911 msgid "IPN Regex" msgstr "IPN reguláris kifejezés" -#: common/models.py:905 +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "Reguláris kifejezés ami illeszkedik az alkatrész IPN-re" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "Többször is előforduló IPN engedélyezése" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "Azonos IPN használható legyen több alkatrész esetén is" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "IPN szerkesztésének engedélyezése" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "IPN megváltoztatásánsak engedélyezése az alkatrész szerkesztése közben" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "Alkatrészjegyzék adatok másolása" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "Alkatrész másoláskor az alkatrészjegyzék adatokat is másoljuk alapból" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "Alkatrész paraméterek másolása" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "Alkatrész másoláskor a paramétereket is másoljuk alapból" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "Alkatrész teszt adatok másolása" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "Alkatrész másoláskor a tesztek adatait is másoljuk alapból" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "Kategória paraméter sablonok másolása" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "Kategória paraméter sablonok másolása alkatrész létrehozásakor" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "Sablon" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "Alkatrészek alapból sablon alkatrészek legyenek" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "Gyártmány" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "Alkatrészeket alapból lehessen gyártani másik alkatrészekből" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "Összetevő" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "Alkatrészek alapból használhatók összetevőként más alkatrészekhez" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "Beszerezhető" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "Alkatrészek alapból beszerezhetők legyenek" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "Értékesíthető" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "Alkatrészek alapból eladhatók legyenek" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "Követésre kötelezett" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "Alkatrészek alapból követésre kötelezettek legyenek" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "Virtuális" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "Alkatrészek alapból virtuálisak legyenek" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "Importálás megjelenítése a nézetekben" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "Import segéd megjelenítése néhány alkatrész nézetben" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "Ár megjelenítése a formokon" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "Alkatrész árak megjelenítése néhány formon" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "Ár megjelenítése az alkatrészjegyzékben" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "Árinformációk megjelenítése az alkatrészjegyzék táblákban" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "Ártörténet megjelenítése" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "Alkatrész ártörténet megjelenítése" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "Kapcsolódó alkatrészek megjelenítése" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "Alkatrész kapcsolódó alkatrészeinek megjelenítése" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "Kezdeti készlet létrehozása" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "Kezdeti készlet megadása az alkatrész létrehozásakor" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "Belső árak" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "Alkatrészekhez belső ár engedélyezése" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "Belső ár alkatrészjegyzék árként" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "Belső ár használata (ha van) az alkatrészjegyzék árszámításában" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "Alkatrész név megjelenítés formátuma" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "Formátum az alkatrész név megjelenítéséhez" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "Alkatrész kategória alapértelmezett ikon" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "Alkatrész kategória alapértelmezett ikon (üres ha nincs)" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "Címke nyomtatás engedélyezése" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "Címke nyomtatás engedélyezése a web felületről" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "Címke kép DPI" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Képek felbontása amik átadásra kerülnek címkenyomtató pluginoknak" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "Riportok engedélyezése" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "Riportok előállításának engedélyezése" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "Debug mód" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "Riportok előállítása HTML formátumban (hibakereséshez)" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "Lapméret" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "Alapértelmezett lapméret a PDF riportokhoz" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "Teszt riportok engedélyezése" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "Teszt riportok előállításának engedélyezése" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "Teszt riportok hozzáadása" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Teszt riport nyomtatáskor egy másolat hozzáadása a készlet tételhez" -#: common/models.py:1136 +#: common/models.py:1143 +msgid "Globally Unique Serials" +msgstr "" + +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" +msgstr "" + +#: common/models.py:1150 msgid "Batch Code Template" msgstr "Batch kód sablon" -#: common/models.py:1137 +#: common/models.py:1151 msgid "Template for generating default batch codes for stock items" msgstr "Sablon a készlet tételekhez alapértelmezett batch kódok előállításához" -#: common/models.py:1142 +#: common/models.py:1156 msgid "Stock Expiry" msgstr "Készlet lejárata" -#: common/models.py:1143 +#: common/models.py:1157 msgid "Enable stock expiry functionality" msgstr "Készlet lejárat kezelésének engedélyezése" -#: common/models.py:1149 +#: common/models.py:1163 msgid "Sell Expired Stock" msgstr "Lejárt készlet értékesítése" -#: common/models.py:1150 +#: common/models.py:1164 msgid "Allow sale of expired stock" msgstr "Lejárt készlet értékesítésének engedélyezése" -#: common/models.py:1156 +#: common/models.py:1170 msgid "Stock Stale Time" msgstr "Álló készlet ideje" -#: common/models.py:1157 +#: common/models.py:1171 msgid "Number of days stock items are considered stale before expiring" msgstr "Napok száma amennyivel a lejárat előtt a készlet tételeket állottnak vesszük" -#: common/models.py:1159 +#: common/models.py:1173 msgid "days" msgstr "nap" -#: common/models.py:1164 +#: common/models.py:1178 msgid "Build Expired Stock" msgstr "Lejárt készlet gyártása" -#: common/models.py:1165 +#: common/models.py:1179 msgid "Allow building with expired stock" msgstr "Gyártás engedélyezése lejárt készletből" -#: common/models.py:1171 +#: common/models.py:1185 msgid "Stock Ownership Control" msgstr "Készlet tulajdonosok kezelése" -#: common/models.py:1172 +#: common/models.py:1186 msgid "Enable ownership control over stock locations and items" msgstr "Tuajdonosok kezelésének engedélyezése a készlet helyekre és tételekre" -#: common/models.py:1178 +#: common/models.py:1192 msgid "Stock Location Default Icon" msgstr "Hely alapértelmezett ikon" -#: common/models.py:1179 +#: common/models.py:1193 msgid "Stock location default icon (empty means no icon)" msgstr "Hely alapértelmezett ikon (üres ha nincs)" -#: common/models.py:1184 +#: common/models.py:1198 msgid "Build Order Reference Pattern" msgstr "Gyártási utasítás azonosító minta" -#: common/models.py:1185 +#: common/models.py:1199 msgid "Required pattern for generating Build Order reference field" msgstr "Szükséges minta a gyártási utasítás azonosító mező előállításához" -#: common/models.py:1191 +#: common/models.py:1205 msgid "Sales Order Reference Pattern" msgstr "Vevői rendelés azonosító minta" -#: common/models.py:1192 +#: common/models.py:1206 msgid "Required pattern for generating Sales Order reference field" msgstr "Szükséges minta a vevői rendelés azonosító mező előállításához" -#: common/models.py:1198 +#: common/models.py:1212 msgid "Sales Order Default Shipment" msgstr "Vevői rendeléshez alapértelmezett szállítmány" -#: common/models.py:1199 +#: common/models.py:1213 msgid "Enable creation of default shipment with sales orders" msgstr "Szállítmány automatikus létrehozása az új vevő rendelésekhez" -#: common/models.py:1205 +#: common/models.py:1219 msgid "Purchase Order Reference Pattern" msgstr "Beszerzési rendelés azonosító minta" -#: common/models.py:1206 +#: common/models.py:1220 msgid "Required pattern for generating Purchase Order reference field" msgstr "Szükséges minta a beszerzési rendelés azonosító mező előállításához" -#: common/models.py:1213 +#: common/models.py:1227 msgid "Enable password forgot" msgstr "Elfelejtett jelszó engedélyezése" -#: common/models.py:1214 +#: common/models.py:1228 msgid "Enable password forgot function on the login pages" msgstr "Elfelejtett jelszó funkció engedélyezése a bejentkező oldalon" -#: common/models.py:1220 +#: common/models.py:1234 msgid "Enable registration" msgstr "Regisztráció engedélyezése" -#: common/models.py:1221 +#: common/models.py:1235 msgid "Enable self-registration for users on the login pages" msgstr "Felhaszálók önkéntes regisztrációjának engedélyezése a bejelentkező oldalon" -#: common/models.py:1227 +#: common/models.py:1241 msgid "Enable SSO" msgstr "SSO engedélyezése" -#: common/models.py:1228 +#: common/models.py:1242 msgid "Enable SSO on the login pages" msgstr "SSO engedélyezése a bejelentkező oldalon" -#: common/models.py:1234 +#: common/models.py:1248 msgid "Email required" msgstr "Email szükséges" -#: common/models.py:1235 +#: common/models.py:1249 msgid "Require user to supply mail on signup" msgstr "Kötelező email megadás regisztrációkor" -#: common/models.py:1241 +#: common/models.py:1255 msgid "Auto-fill SSO users" msgstr "SSO felhasználók automatikus kitöltése" -#: common/models.py:1242 +#: common/models.py:1256 msgid "Automatically fill out user-details from SSO account-data" msgstr "Felhasználó adatainak automatikus kitöltése az SSO fiókadatokból" -#: common/models.py:1248 +#: common/models.py:1262 msgid "Mail twice" msgstr "Email kétszer" -#: common/models.py:1249 +#: common/models.py:1263 msgid "On signup ask users twice for their mail" msgstr "Regisztráláskor kétszer kérdezze a felhasználó email címét" -#: common/models.py:1255 +#: common/models.py:1269 msgid "Password twice" msgstr "Jelszó kétszer" -#: common/models.py:1256 +#: common/models.py:1270 msgid "On signup ask users twice for their password" msgstr "Regisztráláskor kétszer kérdezze a felhasználó jelszavát" -#: common/models.py:1262 +#: common/models.py:1276 msgid "Group on signup" msgstr "Csoport regisztráláskor" -#: common/models.py:1263 +#: common/models.py:1277 msgid "Group to which new users are assigned on registration" msgstr "Csoport amihez a frissen regisztrált felhasználók hozzá lesznek rendelve" -#: common/models.py:1269 +#: common/models.py:1283 msgid "Enforce MFA" msgstr "Többfaktoros hitelesítés kényszerítése" -#: common/models.py:1270 +#: common/models.py:1284 msgid "Users must use multifactor security." msgstr "A felhasználóknak többfaktoros hitelesítést kell használniuk." -#: common/models.py:1276 +#: common/models.py:1290 msgid "Check plugins on startup" msgstr "Pluginok ellenőrzése indításkor" -#: common/models.py:1277 +#: common/models.py:1291 msgid "Check that all plugins are installed on startup - enable in container enviroments" msgstr "Ellenőrizze induláskor hogy minden plugin telepítve van - engedélyezd konténer környezetben (docker)" -#: common/models.py:1284 +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "Plugin aláírások ellenőrzése" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "Pluginok aláírásainak ellenőrzése és megjelenítése" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "URL integráció engedélyezése" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "URL útvonalalak hozzáadásának engedélyezése a pluginok számára" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "Navigációs integráció engedélyezése" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "Navigációs integráció engedélyezése a pluginok számára" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "App integráció engedélyezése" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "App hozzáadásának engedélyezése a pluginok számára" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "Ütemezés integráció engedélyezése" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "Háttérben futó feladatok hozzáadásának engedélyezése a pluginok számára" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "Esemény integráció engedélyezése" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "Belső eseményekre reagálás engedélyezése a pluginok számára" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "Beállítások kulcs (egyedinek kell lennie, nem kis- nagybetű érzékeny" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "Értesítésre beállított alkatrészek megjelenítése" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "Alkatrész értesítések megjelenítése a főoldalon" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "Értesítésre beállított kategóriák megjelenítése" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "Alkatrész kategória értesítések megjelenítése a főoldalon" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "Legújabb alkatrészek megjelenítése" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "Legújabb alkatrészek megjelenítése a főoldalon" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "Legfrissebb alkatrész szám" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "Főoldalon megjelenítendő legújabb alkatrészek" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "Jóváhagyás nélküli alkatrészjegyzékek megjelenítése" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "Jóváhagyásra váró alkatrészjegyzékek megjelenítése a főoldalon" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "Legfrissebb készlet változások megjelenítése" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "Legutóbb megváltozott alkatrészek megjelenítése a főoldalon" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "Legfrissebb készlet mennyiség" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "Főoldalon megjelenítendő legújabb készlet tételek száma" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "Alacsony készlet megjelenítése" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "Alacsony készletek megjelenítése a főoldalon" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "Kimerült készlet megjelenítése" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "Kimerült készletek megjelenítése a főoldalon" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "Gyártáshoz szükséges készlet megjelenítése" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "Gyártáshoz szükséges készletek megjelenítése a főoldalon" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "Lejárt készlet megjelenítése" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "Lejárt készletek megjelenítése a főoldalon" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "Állott készlet megjelenítése" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "Álló készletek megjelenítése a főoldalon" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "Függő gyártások megjelenítése" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "Folyamatban lévő gyártások megjelenítése a főoldalon" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "Késésben lévő gyártások megjelenítése" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "Késésben lévő gyártások megjelenítése a főoldalon" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "Kintlévő beszerzési rendelések megjelenítése" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "Kintlévő beszerzési rendelések megjelenítése a főoldalon" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "Késésben lévő megrendelések megjelenítése" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "Késésben lévő megrendelések megjelenítése a főoldalon" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "Függő vevői rendelések megjelenítése" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "Függő vevői rendelések megjelenítése a főoldalon" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "Késésben lévő vevői rendelések megjelenítése" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "Késésben lévő vevői rendelések megjelenítése a főoldalon" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "Beágyazott címke megjelenítés" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "PDF címkék megjelenítése a böngészőben letöltés helyett" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "Beágyazott riport megjelenítés" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "PDF riport megjelenítése a böngészőben letöltés helyett" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "Alkatrészek keresése" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "Alkatrészek megjelenítése a keresési előnézetben" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "Beszállítói alkatrészek keresése" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "Beszállítói alkatrészek megjelenítése a keresési előnézetben" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "Gyártói alkatrészek keresése" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "Gyártói alkatrészek megjelenítése a keresési előnézetben" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "Inaktív alkatrészek elrejtése" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "Inaktív alkatrészek kihagyása a keresési előnézet találataiból" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "Kategóriák keresése" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "Alkatrész kategóriák megjelenítése a keresési előnézetben" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "Készlet keresése" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "Készlet tételek megjelenítése a keresési előnézetben" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "Nem elérhető készlet tételek elrejtése" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "Nem elérhető készlet kihagyása a keresési előnézet találataiból" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "Helyek keresése" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "Készlet helyek megjelenítése a keresési előnézetben" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "Cégek keresése" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "Cégek megjelenítése a keresési előnézetben" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "Beszerzési rendelések keresése" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "Beszerzési rendelések megjelenítése a keresési előnézetben" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "Inaktív beszerzési rendelések kihagyása" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inaktív beszerzési rendelések kihagyása a keresési előnézet találataiból" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "Vevői rendelések keresése" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "Vevői rendelések megjelenítése a keresési előnézetben" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "Inaktív vevői rendelések kihagyása" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "Inaktív vevői rendelések kihagyása a keresési előnézet találataiból" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "Keresési előnézet eredményei" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "A keresési előnézetben megjelenítendő eredmények száma szekciónként" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "Mennyiség megjelenítése a formokon" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "Rendelkezésre álló alkatrész mennyiség megjelenítése néhány formon" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "ESC billentyű zárja be a formot" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "ESC billentyű használata a modális formok bezárásához" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "Rögzített menüsor" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "A menü pozíciója mindig rögzítve a lap tetején" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "Dátum formátum" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "Preferált dátum formátum a dátumok kijelzésekor" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Alkatrész ütemezés" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "Alkatrész ütemezési információk megjelenítése" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "Táblázati szöveg hossz" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "Maximális szöveg hossz ami megjelenhet a táblázatokban" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "Árlépcső mennyiség" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "Ár" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "Egységár egy meghatározott mennyiség esetén" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "Végpont" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "Végpont ahol ez a webhook érkezik" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "Webhook neve" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2659,67 +2655,67 @@ msgstr "Webhook neve" msgid "Active" msgstr "Aktív" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "Aktív-e ez a webhook" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "Token" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "Token a hozzáféréshez" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "Titok" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "Megosztott titok a HMAC-hoz" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "Üzenet azonosító" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "Egyedi azonosító ehhez az üzenethez" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "Kiszolgáló" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "Kiszolgáló ahonnan ez az üzenet érkezett" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "Fejléc" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "Üzenet fejléce" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "Törzs" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "Üzenet törzse" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "Végpont amin ez az üzenet érkezett" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "Dolgozott rajta" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "Befejeződött a munka ezzel az üzenettel?" @@ -2740,6 +2736,10 @@ msgstr "Készlet érkezett" msgid "Items have been received against a purchase order" msgstr "Készlet érkezett egy beszerzési megrendeléshez" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2826,7 +2826,7 @@ msgstr "Kapcsolattartó" msgid "Link to external company information" msgstr "Link a külső céginformációhoz" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "Kép" @@ -2868,9 +2868,9 @@ msgstr "Pénznem" msgid "Default currency used for this company" msgstr "Cég által használt alapértelmezett pénznem" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "Kiindulási alkatrész" @@ -2929,7 +2929,7 @@ msgstr "Paraméter neve" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2939,7 +2939,7 @@ msgstr "Érték" msgid "Parameter value" msgstr "Paraméter értéke" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2995,22 +2995,22 @@ msgid "Supplier part description" msgstr "Beszállítói alkatrész leírása" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "Megjegyzés" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "alap költség" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimális díj (pl. tárolási díj)" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "Csomagolás" @@ -3032,7 +3032,7 @@ msgstr "Csomagolási mennyiség" msgid "Unit quantity supplied in a single pack" msgstr "Egy csomagban lévő mennyiség" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "többszörös" @@ -3043,8 +3043,8 @@ msgstr "Többszörös rendelés" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3118,8 +3118,8 @@ msgid "Download image from URL" msgstr "Kép letöltése URL-ről" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3137,12 +3137,12 @@ msgid "Phone" msgstr "Telefonszám" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "Kép feltöltése" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "Kép letöltése" @@ -3158,7 +3158,7 @@ msgstr "Új beszállítói alkatrész létrehozása" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "Új beszállítói alkatrész" @@ -3187,7 +3187,7 @@ msgstr "Gyártói alkatrészek" msgid "Create new manufacturer part" msgstr "Új gyártói alkatrész létrehozása" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "Új gyártói alkatrész" @@ -3243,7 +3243,7 @@ msgid "New Sales Order" msgstr "Új vevői rendelés" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "Hozzárendelt készlet" @@ -3290,13 +3290,13 @@ msgid "Suppliers" msgstr "Beszállítók" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "Beszállítói alkatrész törlése" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3321,7 +3321,7 @@ msgid "Delete parameters" msgstr "Paraméterek törlése" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "Paraméter hozzáadása" @@ -3342,7 +3342,7 @@ msgid "Assigned Stock Items" msgstr "Hozzárendelt készlet tételek" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3810,7 +3810,7 @@ msgstr "Beérkezett" msgid "Number of items received" msgstr "Érkezett tételek száma" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3857,8 +3857,8 @@ msgstr "Ellenőrizte" msgid "User who checked this shipment" msgstr "Felhasználó aki ellenőrizte ezt a szállítmányt" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "Szállítmány" @@ -3910,7 +3910,7 @@ msgstr "Nem foglalható készlet egy olyan sorhoz amiben nincs alkatrész" msgid "Allocation quantity cannot exceed stock quantity" msgstr "A lefoglalandó mennyiség nem haladhatja meg a készlet mennyiségét" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "Egyedi követésre kötelezett tételeknél a menyiség 1 kell legyen" @@ -3950,11 +3950,11 @@ msgstr "Pénznem" msgid "Order cannot be cancelled" msgstr "A rendelést nem lehet törölni" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "Rendelés lezárása teljesítetlen sortételek esetén is" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "A rendelésben teljesítetlen sortételek vannak" @@ -3982,7 +3982,7 @@ msgstr "A beszállítónak egyeznie kell a beszerzési rendelésben lévővel" msgid "Purchase order must match supplier" msgstr "A beszerzési rendelésnek egyeznie kell a beszállítóval" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "Sortétel" @@ -3990,7 +3990,7 @@ msgstr "Sortétel" msgid "Line item does not match purchase order" msgstr "Sortétel nem egyezik a beszerzési megrendeléssel" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "Válassz cél helyet a beérkezett tételeknek" @@ -4014,51 +4014,51 @@ msgstr "Ez a vonalkód már használva van" msgid "An integer quantity must be provided for trackable parts" msgstr "Egész számú mennyiség szükséges az egyedi követésre kötelezett alkatrészeknél" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "Sortételt meg kell adni" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "A cél helyet kötelező megadni" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "Megadott vonalkódoknak egyedieknek kel lenniük" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "Eladási ár pénzneme" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "Nincsenek szállítmány részletek megadva" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "Sortétel nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "Mennyiség pozitív kell legyen" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "Írd be a sorozatszámokat a kiosztáshoz" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "Szállítmány kiszállítva" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "Szállítmány nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "Nincs találat a következő sorozatszámokra" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "A következő sorozatszámok már ki lettek osztva" @@ -4071,11 +4071,11 @@ msgstr "Késésben lévő beszerzés" msgid "Purchase order {po} is now overdue" msgstr "A {po} beszerzési rendelés most már késésben van" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "Késésben lévő vevői rendelés" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "A {so} vevői rendelés most már késésben van" @@ -4201,8 +4201,8 @@ msgstr "Beszállítói alkatrész kiválasztása" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4324,8 +4324,8 @@ msgid "Pending Shipments" msgstr "Függő szállítmányok" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "Műveletek" @@ -4399,8 +4399,8 @@ msgstr "Hely megadása a kezdeti alkarész készlethez" msgid "This field is required" msgstr "Ez a mező kötelező" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "Alapértelmezett hely" @@ -4414,7 +4414,7 @@ msgid "Available Stock" msgstr "Elérhető készlet" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4445,7 +4445,7 @@ msgstr "Ikon" msgid "Icon (optional)" msgstr "Ikon (opcionális)" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Alkatrész kategória" @@ -4476,56 +4476,48 @@ msgstr "Hibás választás a szülő alkatrészre" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "A '{p1}' alkatrész a '{p2}' alkatrészjegyzékében már szerepel (rekurzív)" -#: part/models.py:628 -msgid "Next available serial numbers are" -msgstr "A következő szabad sorozatszámok" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" +msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "A következő szabad sorozatszám" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "A legutóbbi sorozatszám" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "Azonos IPN nem engedélyezett az alkatrész beállításokban" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "Alkatrész neve" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "Sablon-e" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "Ez egy sablon alkatrész?" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "Ez az alkatrész egy másik változata?" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "Ebből a sablonból" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "Alkatrész leírása" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "Kulcsszavak" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "Alkatrész kulcsszavak amik segítik a megjelenést a keresési eredményekben" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4533,367 +4525,367 @@ msgstr "Alkatrész kulcsszavak amik segítik a megjelenést a keresési eredmén msgid "Category" msgstr "Kategória" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "Alkatrész kategória" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "IPN" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "Belső cikkszám" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "Alkatrész változat vagy verziószám (pl. szín, hossz, revízió, stb.)" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "Változat" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "Alapban hol tároljuk ezt az alkatrészt?" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "Alapértelmezett beszállító" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "Alapértelmezett beszállítói alkatrész" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "Alapértelmezett lejárat" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "Lejárati idő (napban) ennek az alkatrésznek a készleteire" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "Minimális készlet" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "Minimálisan megengedett készlet mennyiség" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "Az alkatrész raktározási mértékegységei" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "Gyártható-e ez az alkatrész más alkatrészekből?" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "Felhasználható-e ez az alkatrész más alkatrészek gyártásához?" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "Kell-e külön követni az egyes példányait ennek az alkatrésznek?" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "Rendelhető-e ez az alkatrész egy külső beszállítótól?" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "Értékesíthető-e önmagában ez az alkatrész a vevőknek?" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "Aktív-e ez az alkatrész?" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "Ez egy virtuális nem megfogható alkatrész, pl. szoftver vagy licenc?" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "Alkatrész megjegyzések" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "Alkatrészjegyzék ellenőrző összeg" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "Tárolt alkatrészjegyzék ellenőrző összeg" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "Alkatrészjegyzéket ellenőrizte" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "Alkatrészjegyzék ellenőrzési dátuma" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "Létrehozó" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "Több értékesítése" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "Teszt sablont csak követésre kötelezett alkatrészhez lehet csinálni" -#: part/models.py:2322 +#: part/models.py:2336 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:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "Teszt név" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "Add meg a teszt nevét" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "Teszt leírása" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "Adj hozzá egy leírást ehhez a teszthez" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "Kötelező" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "Szükséges-e hogy ez a teszt sikeres legyen?" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "Kötelező érték" -#: part/models.py:2361 +#: part/models.py:2375 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:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "Kötelező melléklet" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "Szükséges-e hogy ennek a tesztnek az eredményéhez kötelezően fájl melléklet legyen rendelve?" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "Érvénytelen karakter ({c}) a sablon nevében" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "A paraméter sablon nevének egyedinek kell lennie" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "Paraméter neve" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "Paraméter mértékegysége" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "Paraméter leírása" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "Szülő alkatrész" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "Paraméter sablon" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "Adat" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "Paraméter értéke" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "Alapértelmezett érték" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "Alapértelmezett paraméter érték" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "Alkatrész ID vagy alkatrész név" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "Alkatrész ID" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "Egyedi alkatrész ID értéke" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "Alkatrész neve" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "Alkatrész IPN" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "Alkatrész IPN érték" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "Szint" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "Alkatrészjegyzék szint" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "Szülő alkatrész kiválasztása" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "Al alkatrész" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "Válaszd ki az alkatrészjegyzékben használandó alkatrészt" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "Alkatrészjegyzék mennyiség ehhez az alkatrészjegyzék tételhez" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "Opcionális" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "Ez az alkatrészjegyzék tétel opcionális" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "Fogyóeszköz" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Ez a BOM tétel fogyóeszköz (készlete nincs követve a gyártásban)" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Többlet" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Becsült gyártási veszteség (abszolút vagy százalékos)" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "Alkatrészjegyzék tétel azonosító" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "Alkatrészjegyzék tétel megjegyzései" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "Ellenőrző összeg" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "Alkatrészjegyzék sor ellenőrző összeg" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "Örökölt" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Ezt az alkatrészjegyzék tételt az alkatrész változatok alkatrészjegyzékei is öröklik" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "Változatok" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Alkatrészváltozatok készlet tételei használhatók ehhez az alkatrészjegyzék tételhez" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "A mennyiség egész szám kell legyen a követésre kötelezett alkatrészek esetén" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "Al alkatrészt kötelező megadni" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "Alkatrészjegyzék tétel helyettesítő" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "A helyettesítő alkatrész nem lehet ugyanaz mint a fő alkatrész" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "Szülő alkatrészjegyzék tétel" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "Helyettesítő alkatrész" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "1.rész" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "2.rész" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "Válassz kapcsolódó alkatrészt" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "Alkatrész kapcsolat nem hozható létre önmagával" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "Már létezik duplikált alkatrész kapcsolat" @@ -5066,12 +5058,12 @@ msgstr "Alkatrészek száma (alkategóriákkal együtt)" msgid "Create new part" msgstr "Alkatrész létrehozása" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "Új alkatrész" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "Opciók" @@ -5195,7 +5187,7 @@ msgstr "Alkatrészjegyzék" msgid "Export actions" msgstr "Exportálási műveletek" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "Alkatrészjegyzék exportálása" @@ -5215,70 +5207,63 @@ msgstr "Alkatrészjegyzék másolása" msgid "Validate BOM" msgstr "Alkatrészjegyzék jóváhagyása" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "Új alkatrészjegyzék tétel" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "Alkatrészjegyzék tétel hozzáadása" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "Gyártmányok" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "Alkatrész gyártások" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "Gyártáshoz foglalások" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "Alkatrész beszállítók" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "Alkatrész gyártók" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "Gyártói alkatrészek törlése" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "Alkatrészjegyzék tétel létrehozása" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "Kapcsolódó alkatrész" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "Kapcsolódó alkatrész hozzáadása" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "Teszt eredmény sablon hozzáadása" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "Beszerzési egységár - %(currency)s" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "Egységár-önköltség különbség - %(currency)s" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "Beszállítói egység költség - %(currency)s" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "Egységár - %(currency)s" @@ -5421,7 +5406,7 @@ msgid "Inactive" msgstr "Inaktív" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "Alkatrész részletei" @@ -5446,7 +5431,7 @@ msgstr "Gyártáshoz lefoglalva" msgid "Allocated to Sales Orders" msgstr "Vevő rendeléshez lefoglalva" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "Gyártható" @@ -5460,28 +5445,28 @@ msgstr "Gyártásban" msgid "Minimum stock level" msgstr "Minimális készlet" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "Legutolsó sorozatszám" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "Sorozatszámra keresés" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "Vonalkód hozzárendelése az alkatrészhez" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "Számítás" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "Nincs egyező kép" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "Részletek elrejtése" @@ -5508,7 +5493,7 @@ msgid "Total Cost" msgstr "Teljes költség" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "Nincs beszállítói árinfomáció" @@ -5603,7 +5588,7 @@ msgstr "Eladási ár megjelenítése" msgid "Calculation parameters" msgstr "Számítási paraméterek" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "Beszállítói költség" @@ -5745,23 +5730,23 @@ msgstr "Nincs megadva művelet" msgid "No matching action found" msgstr "Nincs egyező művelet" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "Meg kell adni a barcode_data paramétert" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "Nincs egyező vonalkód" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "Egyezés vonalkódra" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "Ez a vonalkód már egy másik tételé" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "Nincs találat a megadott értékre" @@ -5823,7 +5808,7 @@ msgstr "Aktív-e a plugin" msgid "Sample plugin" msgstr "Példa plugin" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "Plugin" @@ -5839,6 +5824,20 @@ msgstr "Nincs szerző" msgid "No date found" msgstr "Nincs dátum" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "Beszerzési rendelések engedélyezése" @@ -6013,9 +6012,9 @@ msgid "Stock Item Test Report" msgstr "Készlet tétel teszt riport" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6027,12 +6026,12 @@ msgid "Test Results" msgstr "Teszt eredmények" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "Teszt" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "Eredmény" @@ -6067,241 +6066,237 @@ msgstr "Egy érvényes alkatrészt meg kell adni" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Sorozatszámot nem lehet megadni nem követésre kötelezett alkatrész esetén" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "Tulajdonos" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "Tulajdonos kiválasztása" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "Létezik már készlet tétel ilyen a sorozatszámmal" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "Virtuális alkatrészből nem lehet készletet létrehozni" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "A alkatrész típus ('{pf}') {pe} kell legyen" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "Mennyiség 1 kell legyen a sorozatszámmal rendelkező tételnél" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Nem lehet sorozatszámot megadni ha a mennyiség több mint egy" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "A tétel nem tartozhat saját magához" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "A tételnek kell legyen gyártási azonosítója ha az is_bulding igaz" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "Gyártási azonosító nem ugyanarra az alkatrész objektumra mutat" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "Szülő készlet tétel" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "Kiindulási alkatrész" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "Válassz egy egyező beszállítói alkatrészt ehhez a készlet tételhez" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Készlet hely" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "Hol található ez az alkatrész?" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "A csomagolása ennek a készlet tételnek itt van tárolva" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "Beépítve ebbe" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "Ez a tétel be van építve egy másik tételbe?" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "Sorozatszám ehhez a tételhez" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "Batch kód ehhez a készlet tételhez" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "Készlet mennyiség" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "Forrás gyártás" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "Gyártás ehhez a készlet tételhez" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "Forrás beszerzési rendelés" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "Beszerzés ehhez a készlet tételhez" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "Cél vevői rendelés" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "Lejárati dátum" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Készlet tétel lejárati dátuma. A készlet lejártnak tekinthető ezután a dátum után" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "Törlés ha kimerül" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "Készlet tétel törlése ha kimerül" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "Készlet tétel megjegyzések" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "Egy egység beszerzési ára a beszerzés időpontjában" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "Alkatrésszé alakítva" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "Az alkatrész nem követésre kötelezett" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "Mennyiség egész szám kell legyen" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "A mennyiség nem lépheti túl a készletet ({n})" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "A sorozatszám egész számok listája kell legyen" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "A mennyiség nem egyezik a megadott sorozatszámok számával" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "Ezek a sorozatszámok már léteznek: {exists}" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "Készlet tétel hozzárendelve egy vevői rendeléshez" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "Készlet tétel beépül egy másikba" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "A készlet tétel más tételeket tartalmaz" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "Készlet tétel hozzárendelve egy vevőhöz" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "Készlet tétel gyártás alatt" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "Követésre kötelezett készlet nem vonható össze" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "Duplikált készlet tételek vannak" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "A készlet tétel ugyanarra az alkatrészre kell vonatkozzon" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "A készlet tétel ugyanarra a beszállítói alkatrészre kell vonatkozzon" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "Készlet tételek állapotainak egyeznie kell" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "Készlet tétel nem mozgatható mivel nincs készleten" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "Bejegyzés megjegyzései" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "Ehhez a teszthez meg kell adni értéket" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "Ehhez a teszthez fel kell tölteni mellékletet" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "Teszt neve" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "Teszt eredménye" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "Teszt kimeneti értéke" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "Teszt eredmény melléklet" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "Tesztek megjegyzései" @@ -6326,7 +6321,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:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "Cél készlet hely" @@ -6338,99 +6333,99 @@ msgstr "Opcionális megjegyzés mező" msgid "Serial numbers cannot be assigned to this part" msgstr "Sorozatszámokat nem lehet hozzárendelni ehhez az alkatrészhez" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "A sorozatszámok már léteznek" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "Válaszd ki a beépítésre szánt készlet tételt" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "Készlet tétel nem elérhető" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "A kiválasztott alkatrész nincs az alkatrészjegyzékben" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "Cél hely a kiszedett tételeknek" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "Tranzakció megjegyzés hozzáadása (opcionális)" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "Válassz alkatrészt amire konvertáljuk a készletet" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "A kiválasztott alkatrész nem megfelelő a konverzióhoz" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "Cél hely a visszatérő tételeknek" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "Az alkatrésznek értékesíthetőnek kell lennie" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "A tétel egy vevő rendeléshez foglalt" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "A tétel egy gyártási utasításhoz foglalt" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "Vevő akihez rendeljük a készlet tételeket" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "A kiválasztott cég nem egy vevő" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "Készlet hozzárendelés megjegyzései" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "A készlet tételek listáját meg kell adni" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "Készlet összevonás megjegyzései" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "Nem egyező beszállítók megengedése" -#: stock/serializers.py:929 +#: stock/serializers.py:933 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:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "Nem egyező állapotok megjelenítése" -#: stock/serializers.py:935 +#: stock/serializers.py:939 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:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "Legalább két készlet tételt meg kell adni" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "Készlet tétel elsődleges kulcs értéke" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "Készlet tranzakció megjegyzései" @@ -6619,7 +6614,7 @@ msgid "Available Quantity" msgstr "Elérhető mennyiség" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "Nincs beállítva hely" @@ -7085,11 +7080,6 @@ msgstr "Szakasz" msgid "Message" msgstr "Üzenet" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "A %(name)s plugin részletei" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "Plugin információ" @@ -7807,7 +7797,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:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "Szükséges mennyiség" @@ -8012,15 +8002,19 @@ msgstr "Készlet áthelyezése a leolvasott helyre" msgid "Barcode does not match a valid location" msgstr "A vonalkód nem egyezik egy ismert hellyel sem" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "Alkatrészjegyzék tétel létrehozása" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "Sor adatok mutatása" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "Sor adat" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8028,180 +8022,180 @@ msgstr "Sor adat" msgid "Close" msgstr "Bezárás" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "Alkarészjegyzék sablon letöltése" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "Formátum" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "Fájlfomátum kiválasztása" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "Többszintű alkatrészlista" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "Alszerelvények alkatrészlistáinak felhasználása" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "Szintek" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "Válaszd ki a maximum alkatrészjegyzék szintet amit exportáljunk (0=összes szintet)" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "Paraméter adattal együtt" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "Alkatrész paraméter adatok megjelenítése az exportált alkatrészjegyzékben" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "Készlet adatokkal együtt" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "Készlet adatok megjelenítése az exportált alkatrészjegyzékben" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "Gyártói adatokkal együtt" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "Gyártói adatok megjelenítése az exportált alkatrészjegyzékben" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "Beszállítói adatokkal együtt" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "Beszállítói adatok megjelenítése az exportált alkatrészjegyzékben" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "Helyettesítő alkatrész törlése" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "Válassz és adj hozzá új helyettesítő alkatrészt a lenti mezőben" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "Biztosan törölni akarod ezt a helyettesítő alkatrész hozzárendelést?" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "Helyettesítő alkatrész törlése" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "Helyettesítő hozzáadása" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "Alkatrészjegyzék tétel helyettesítők szerkesztése" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "Az összes kijelölt alkatrészjegyzék tétel törlésre kerül" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "Töröljük a kiválasztott alkatrészjegyzék tételeket?" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "BOM betöltése az al-gyártmányhoz" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "Vannak helyettesítők" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "Készletváltozatok engedélyezve" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "Nincs szabad" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "Változatokkal és helyettesítőkkel együtt" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "Változatokkal együtt" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "Helyettesítőkkel együtt" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "Helyettesítõk" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "Alkatrészjegyzék megtekintése" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "Beszerzési ártartomány" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "Beszerzési átlagár" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "Fogyóeszköz tétel" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "Alkatrészjegyzék tétel jóváhagyása" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "Ez a sor jóvá lett hagyva" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "Helyettesítő alkatrészek szerkesztése" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "Alkatrészjegyzék tétel szerkesztése" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "Alkatrészjegyzék tétel törlése" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "Nem találhatók alkatrészjegyzék tételek" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "Szükséges alkatrész" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "Örökölve a szülő alkatrészjegyzéktől" @@ -8331,158 +8325,158 @@ msgstr "Hely nincs megadva" msgid "No active build outputs found" msgstr "Nem található aktív gyártási kimenet" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "Lefoglalt készlet" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "Nincsenek követett BOM tételek ehhez a gyártáshoz" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "Befejezett tesztek" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "Nincsenek szükséges tesztek ehhez a gyártáshoz" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "Készlet foglalások szerkesztése" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "Készlet foglalások törlése" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "Foglalás szerkesztése" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "Foglalás törlése" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "Vannak helyettesítő alkatrészek" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "Szükséges/db" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "Nincs elegendő" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "Van elegendő" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "Lefoglalva" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "Gyártási készlet" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "Készlet rendelés" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "Lefoglalt készlet" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "Kiválasztott alkatrészek" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "Legalább egy alkatrész választása szükséges a foglaláshoz" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "Készlet foglalási mennyiség megadása" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "Minden alkatrész lefoglalva" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "Minden kiválasztott alkatrész teljesen lefoglalva" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "Válassz forrás helyet (vagy hagyd üresen ha bárhonnan)" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "Készlet foglalása a gyártási utasításhoz" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "Nincs egyező készlethely" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "Nincs egyező készlet" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "Automatikus készlet foglalás" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "A készlet automatikusan lefoglalásra kerül ehhez a gyártási utasításhoz, a következő feltételek szerint" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "Ha egy készlet hely meg van adva, akkor készlet csak arról a helyről lesz foglalva" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "Ha a készlet helyettesíthetőnek minősül, akkor az első rendelkezésre álló helyről lesz lefoglalva" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "Ha a helyettesítő készlet engedélyezve van, akkor ott az lesz használva ha az elsődleges alkatrésznek nincs készlete" -#: templates/js/translated/build.js:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "Készlet tételek foglalása" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "Nincs a lekérdezéssel egyező gyártási utasítás" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "Kiválaszt" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "Gyártás késésben van" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "Haladás" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "Nincs felhasználói információ" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "Nincs lefoglalt alkatrész ehhez" @@ -8661,32 +8655,32 @@ msgstr "Form nyitva tartása" msgid "Enter a valid number" msgstr "Adj meg egy érvényes számot" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Form hibák vannak" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "Nincs eredmény" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "Keresés" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "Bevitel törlése" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "Fájl oszlop" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "Mező név" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "Oszlopok kiválasztása" diff --git a/InvenTree/locale/id/LC_MESSAGES/django.po b/InvenTree/locale/id/LC_MESSAGES/django.po index b3cac5c146..e0b77f9499 100644 --- a/InvenTree/locale/id/LC_MESSAGES/django.po +++ b/InvenTree/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -25,29 +25,29 @@ msgstr "API endpoint tidak ditemukan" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Masukkan tanggal" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 #: templates/js/translated/order.js:4402 templates/js/translated/stock.js:1374 #: templates/js/translated/stock.js:1982 msgid "Notes" -msgstr "" +msgstr "Catatan" #: InvenTree/format.py:142 #, python-brace-format @@ -76,7 +76,7 @@ msgstr "Konfirmasi sandi baru" #: InvenTree/forms.py:148 msgid "Old password" -msgstr "" +msgstr "Kata sandi lama" #: InvenTree/forms.py:177 msgid "Email (again)" @@ -88,7 +88,7 @@ msgstr "Konfirmasi alamat email" #: InvenTree/forms.py:202 msgid "You must type the same email each time." -msgstr "" +msgstr "Masukkan email yang sama." #: InvenTree/helpers.py:158 msgid "Connection error" @@ -108,7 +108,7 @@ msgstr "" #: InvenTree/helpers.py:175 msgid "Image size is too large" -msgstr "" +msgstr "Ukuran gambar terlalu besar" #: InvenTree/helpers.py:187 msgid "Image download exceeded maximum size" @@ -120,51 +120,40 @@ msgstr "" #: InvenTree/helpers.py:200 msgid "Supplied URL is not a valid image file" -msgstr "" +msgstr "URL yang diberikan bukan file gambar yang valid" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" -msgstr "" +msgstr "Jumlah yang diberikan tidak valid" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" +msgstr "Nomor seri kosong" + +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" -msgstr "" +msgstr "Jangkauan grup tidak valid: {g}" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" -msgstr "" +msgstr "Urutan grup tidak valid: {g}" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" -msgstr "" +msgstr "Tidak ada nomor seri ditemukan" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -194,91 +183,91 @@ msgstr "" #: InvenTree/models.py:384 msgid "Missing file" -msgstr "" +msgstr "File tidak ditemukan" #: InvenTree/models.py:385 msgid "Missing external link" -msgstr "" +msgstr "Tautan eksternal tidak ditemukan" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" -msgstr "" +msgstr "Lampiran" #: InvenTree/models.py:406 msgid "Select file to attach" -msgstr "" +msgstr "Pilih file untuk dilampirkan" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 #: templates/js/translated/order.js:3042 templates/js/translated/part.js:1567 msgid "Link" -msgstr "" +msgstr "Tautan" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" -msgstr "" +msgstr "Tautan menuju URL eksternal" #: InvenTree/models.py:416 templates/js/translated/attachment.js:104 #: templates/js/translated/attachment.js:285 msgid "Comment" -msgstr "" +msgstr "Komentar" #: InvenTree/models.py:416 msgid "File comment" -msgstr "" +msgstr "Komentar file" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" -msgstr "" +msgstr "Pengguna" #: InvenTree/models.py:426 msgid "upload date" -msgstr "" +msgstr "tanggal diunggah" #: InvenTree/models.py:448 msgid "Filename must not be empty" -msgstr "" +msgstr "Nama file tidak boleh kosong" #: InvenTree/models.py:457 msgid "Invalid attachment directory" -msgstr "" +msgstr "Direktori lampiran tidak valid" #: InvenTree/models.py:467 #, python-brace-format msgid "Filename contains illegal character '{c}'" -msgstr "" +msgstr "Nama file mengandung karakter yang tidak diperkenankan '{c}'" #: InvenTree/models.py:470 msgid "Filename missing extension" -msgstr "" +msgstr "Nama file tidak memiliki ekstensi" #: InvenTree/models.py:477 msgid "Attachment with this filename already exists" -msgstr "" +msgstr "Lampiran dengan nama file ini sudah ada" #: InvenTree/models.py:484 msgid "Error renaming file" -msgstr "" +msgstr "Kesalahan merubah nama file" #: InvenTree/models.py:520 msgid "Invalid choice" -msgstr "" +msgstr "Pilihan tidak valid" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -290,14 +279,14 @@ msgstr "" #: templates/js/translated/part.js:686 templates/js/translated/part.js:838 #: templates/js/translated/part.js:1960 templates/js/translated/stock.js:2394 msgid "Name" -msgstr "" +msgstr "Nama" #: InvenTree/models.py:564 build/models.py:163 #: build/templates/build/detail.html:24 company/models.py:282 #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -315,215 +304,215 @@ msgstr "" #: templates/js/translated/part.js:2071 templates/js/translated/stock.js:1748 #: templates/js/translated/stock.js:2426 templates/js/translated/stock.js:2486 msgid "Description" -msgstr "" +msgstr "Keterangan" #: InvenTree/models.py:565 msgid "Description (optional)" -msgstr "" +msgstr "Keterangan (opsional)" #: InvenTree/models.py:573 msgid "parent" -msgstr "" +msgstr "induk" #: InvenTree/models.py:580 InvenTree/models.py:581 #: templates/js/translated/part.js:2005 templates/js/translated/stock.js:2435 msgid "Path" -msgstr "" +msgstr "Direktori" #: InvenTree/models.py:682 msgid "Barcode Data" -msgstr "" +msgstr "Data Barcode" #: InvenTree/models.py:683 msgid "Third party barcode data" -msgstr "" +msgstr "Data barcode pihak ketiga" #: InvenTree/models.py:688 order/serializers.py:486 msgid "Barcode Hash" -msgstr "" +msgstr "Barcode Hash" #: InvenTree/models.py:689 msgid "Unique hash of barcode data" -msgstr "" +msgstr "Hash unik data barcode" #: InvenTree/models.py:734 msgid "Existing barcode found" -msgstr "" +msgstr "Sudah ada barcode yang sama" #: InvenTree/models.py:787 msgid "Server Error" -msgstr "" +msgstr "Terjadi Kesalahan Server" #: InvenTree/models.py:788 msgid "An error has been logged by the server." -msgstr "" +msgstr "Sebuah kesalahan telah dicatat oleh server." -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" -msgstr "" +msgstr "Harus berupa angka yang valid" #: InvenTree/serializers.py:262 msgid "Filename" -msgstr "" +msgstr "Nama File" #: InvenTree/serializers.py:297 msgid "Invalid value" -msgstr "" +msgstr "Nilai tidak valid" #: InvenTree/serializers.py:319 msgid "Data File" -msgstr "" +msgstr "File data" #: InvenTree/serializers.py:320 msgid "Select data file for upload" -msgstr "" +msgstr "Pilih file untuk diunggah" #: InvenTree/serializers.py:341 msgid "Unsupported file type" -msgstr "" +msgstr "Jenis file tidak didukung" #: InvenTree/serializers.py:347 msgid "File is too large" -msgstr "" +msgstr "Ukuran file terlalu besar" #: InvenTree/serializers.py:368 msgid "No columns found in file" -msgstr "" +msgstr "Tidak ditemukan kolom dalam file" #: InvenTree/serializers.py:371 msgid "No data rows found in file" -msgstr "" +msgstr "Tidak ditemukan barisan data dalam file" #: InvenTree/serializers.py:494 msgid "No data rows provided" -msgstr "" +msgstr "Tidak ada barisan data tersedia" #: InvenTree/serializers.py:497 msgid "No data columns supplied" -msgstr "" +msgstr "Tidak ada kolom data tersedia" #: InvenTree/serializers.py:574 #, python-brace-format msgid "Missing required column: '{name}'" -msgstr "" +msgstr "Kolom yang diperlukan kurang: '{name}'" #: InvenTree/serializers.py:583 #, python-brace-format msgid "Duplicate column: '{col}'" -msgstr "" +msgstr "Kolom duplikat: '{col}'" #: InvenTree/serializers.py:602 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" -msgstr "" +msgstr "URL" #: InvenTree/serializers.py:603 msgid "URL of remote image file" -msgstr "" +msgstr "URL file gambar external" #: InvenTree/serializers.py:617 msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/settings.py:613 -msgid "Czech" -msgstr "" - -#: InvenTree/settings.py:614 -msgid "Danish" -msgstr "" - -#: InvenTree/settings.py:615 -msgid "German" -msgstr "" - -#: InvenTree/settings.py:616 -msgid "Greek" -msgstr "" - -#: InvenTree/settings.py:617 -msgid "English" -msgstr "" - -#: InvenTree/settings.py:618 -msgid "Spanish" -msgstr "" - -#: InvenTree/settings.py:619 -msgid "Spanish (Mexican)" -msgstr "" - -#: InvenTree/settings.py:620 -msgid "Farsi / Persian" -msgstr "" +msgstr "Unduhan gambar dari URL external tidak aktif" #: InvenTree/settings.py:621 -msgid "French" -msgstr "" +msgid "Czech" +msgstr "Ceko" #: InvenTree/settings.py:622 -msgid "Hebrew" -msgstr "" +msgid "Danish" +msgstr "Denmark" #: InvenTree/settings.py:623 -msgid "Hungarian" -msgstr "" +msgid "German" +msgstr "Jerman" #: InvenTree/settings.py:624 -msgid "Italian" -msgstr "" +msgid "Greek" +msgstr "Yunani" #: InvenTree/settings.py:625 -msgid "Japanese" -msgstr "" +msgid "English" +msgstr "Inggris" #: InvenTree/settings.py:626 -msgid "Korean" -msgstr "" +msgid "Spanish" +msgstr "Spanyol" #: InvenTree/settings.py:627 -msgid "Dutch" -msgstr "" +msgid "Spanish (Mexican)" +msgstr "Spanyol (Meksiko)" #: InvenTree/settings.py:628 -msgid "Norwegian" -msgstr "" +msgid "Farsi / Persian" +msgstr "Farsi / Persia" #: InvenTree/settings.py:629 -msgid "Polish" -msgstr "" +msgid "French" +msgstr "Perancis" #: InvenTree/settings.py:630 -msgid "Portuguese" -msgstr "" +msgid "Hebrew" +msgstr "Ibrani" #: InvenTree/settings.py:631 -msgid "Portuguese (Brazilian)" -msgstr "" +msgid "Hungarian" +msgstr "Hungaria" #: InvenTree/settings.py:632 -msgid "Russian" -msgstr "" +msgid "Italian" +msgstr "Itali" #: InvenTree/settings.py:633 -msgid "Swedish" -msgstr "" +msgid "Japanese" +msgstr "Jepang" #: InvenTree/settings.py:634 -msgid "Thai" -msgstr "" +msgid "Korean" +msgstr "Korea" #: InvenTree/settings.py:635 -msgid "Turkish" -msgstr "" +msgid "Dutch" +msgstr "Belanda" #: InvenTree/settings.py:636 -msgid "Vietnamese" -msgstr "" +msgid "Norwegian" +msgstr "Norwegia" #: InvenTree/settings.py:637 +msgid "Polish" +msgstr "Polandia" + +#: InvenTree/settings.py:638 +msgid "Portuguese" +msgstr "Portugis" + +#: InvenTree/settings.py:639 +msgid "Portuguese (Brazilian)" +msgstr "Portugis (Brasil)" + +#: InvenTree/settings.py:640 +msgid "Russian" +msgstr "Rusia" + +#: InvenTree/settings.py:641 +msgid "Swedish" +msgstr "Swedia" + +#: InvenTree/settings.py:642 +msgid "Thai" +msgstr "Thai" + +#: InvenTree/settings.py:643 +msgid "Turkish" +msgstr "Turki" + +#: InvenTree/settings.py:644 +msgid "Vietnamese" +msgstr "Vietnam" + +#: InvenTree/settings.py:645 msgid "Chinese" -msgstr "" +msgstr "Cina" #: InvenTree/status.py:99 msgid "Background worker check failed" @@ -544,53 +533,53 @@ msgstr "" #: InvenTree/status_codes.py:100 msgid "Placed" -msgstr "" +msgstr "Diletakkan" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 #: order/templates/order/order_base.html:143 #: order/templates/order/sales_order_base.html:133 msgid "Complete" -msgstr "" +msgstr "Selesai" #: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 #: InvenTree/status_codes.py:308 msgid "Cancelled" -msgstr "" +msgstr "Dibatalkan" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 #: InvenTree/status_codes.py:183 msgid "Lost" -msgstr "" +msgstr "Hilang" #: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 #: InvenTree/status_codes.py:186 msgid "Returned" -msgstr "" +msgstr "Dikembalikan" #: InvenTree/status_codes.py:141 order/models.py:1142 #: templates/js/translated/order.js:3630 templates/js/translated/order.js:3979 msgid "Shipped" -msgstr "" +msgstr "Dikirim" #: InvenTree/status_codes.py:179 msgid "OK" -msgstr "" +msgstr "OK" #: InvenTree/status_codes.py:180 msgid "Attention needed" -msgstr "" +msgstr "Butuh perhatian" #: InvenTree/status_codes.py:181 msgid "Damaged" -msgstr "" +msgstr "Rusak" #: InvenTree/status_codes.py:182 msgid "Destroyed" -msgstr "" +msgstr "Hancur" #: InvenTree/status_codes.py:184 msgid "Rejected" -msgstr "" +msgstr "Ditolak" #: InvenTree/status_codes.py:185 msgid "Quarantined" @@ -602,153 +591,144 @@ msgstr "" #: InvenTree/status_codes.py:261 msgid "Stock item created" -msgstr "" +msgstr "Item stok dibuat" #: InvenTree/status_codes.py:263 msgid "Edited stock item" -msgstr "" +msgstr "Item stok diubah" #: InvenTree/status_codes.py:264 msgid "Assigned serial number" -msgstr "" +msgstr "Nomor seri yang ditetapkan" #: InvenTree/status_codes.py:266 msgid "Stock counted" -msgstr "" +msgstr "Stok terhitung" #: InvenTree/status_codes.py:267 msgid "Stock manually added" -msgstr "" +msgstr "Stok yang ditambahkan manual" #: InvenTree/status_codes.py:268 msgid "Stock manually removed" -msgstr "" +msgstr "Stok yang dikurangi manual" #: InvenTree/status_codes.py:270 msgid "Location changed" -msgstr "" +msgstr "Lokasi berubah" #: InvenTree/status_codes.py:272 msgid "Installed into assembly" -msgstr "" +msgstr "Dirakit ke" #: InvenTree/status_codes.py:273 msgid "Removed from assembly" -msgstr "" +msgstr "Diambil dari" #: InvenTree/status_codes.py:275 msgid "Installed component item" -msgstr "" +msgstr "Komponen terpasang" #: InvenTree/status_codes.py:276 msgid "Removed component item" -msgstr "" +msgstr "Komponen terlepas" #: InvenTree/status_codes.py:278 msgid "Split from parent item" -msgstr "" +msgstr "Dipisah dari item induk" #: InvenTree/status_codes.py:279 msgid "Split child item" -msgstr "" +msgstr "Pisah item dari barang induk" #: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2086 msgid "Merged stock items" -msgstr "" +msgstr "Stok item digabungkan" #: InvenTree/status_codes.py:283 msgid "Converted to variant" -msgstr "" +msgstr "Dikonversi ke variasi" #: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:229 msgid "Sent to customer" -msgstr "" +msgstr "Terkirim ke pelanggan" #: InvenTree/status_codes.py:286 msgid "Returned from customer" -msgstr "" +msgstr "Dikembalikan pelanggan" #: InvenTree/status_codes.py:288 msgid "Build order output created" -msgstr "" +msgstr "Output order produksi dibuat" #: InvenTree/status_codes.py:289 msgid "Build order output completed" -msgstr "" +msgstr "Order output produksi selesai" #: InvenTree/status_codes.py:290 msgid "Consumed by build order" -msgstr "" +msgstr "Terpakai oleh order produksi" #: InvenTree/status_codes.py:292 msgid "Received against purchase order" -msgstr "" +msgstr "Diterima dari order pembelian" #: InvenTree/status_codes.py:307 msgid "Production" -msgstr "" +msgstr "Produksi" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" -msgstr "" +msgstr "Bukan kode mata uang yang valid" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" -msgstr "" +msgstr "IPN harus sesuai dengan pola regex {pat}" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" -msgstr "" +msgstr "Nilai kelebihan tidak boleh negatif" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" -msgstr "" +msgstr "Kelebihan tidak boleh melebihi 100%" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" -msgstr "" +msgstr "Nilai kelebihan tidak valid" #: InvenTree/views.py:520 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" -msgstr "" +msgstr "Ubah Informasi User" #: InvenTree/views.py:532 templates/InvenTree/settings/user.html:19 msgid "Set Password" -msgstr "" +msgstr "Atur Kata Sandi" #: InvenTree/views.py:554 msgid "Password fields must match" -msgstr "" +msgstr "Bidang kata sandi tidak cocok" #: InvenTree/views.py:563 msgid "Wrong password provided" -msgstr "" +msgstr "Kata sandi yang salah" #: InvenTree/views.py:773 templates/navbar.html:152 msgid "System Information" -msgstr "" +msgstr "Informasi Sistem" #: InvenTree/views.py:780 templates/navbar.html:163 msgid "About InvenTree" -msgstr "" +msgstr "Tentang InvenTree" #: build/api.py:219 msgid "Build must be cancelled before it can be deleted" -msgstr "" +msgstr "Pesanan harus dibatalkan sebelum dapat dihapus" #: build/models.py:105 msgid "Invalid choice for parent build" -msgstr "" +msgstr "Pilihan produksi induk tidak valid" #: build/models.py:110 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 @@ -757,7 +737,7 @@ msgstr "" #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:780 msgid "Build Order" -msgstr "" +msgstr "Order Produksi" #: build/models.py:111 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 @@ -767,59 +747,59 @@ msgstr "" #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:47 users/models.py:41 msgid "Build Orders" -msgstr "" +msgstr "Order Produksi" #: build/models.py:154 msgid "Build Order Reference" -msgstr "" +msgstr "Referensi Order Produksi" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" -msgstr "" +msgstr "Referensi" #: build/models.py:166 msgid "Brief description of the build" -msgstr "" +msgstr "Deskripsi singkat produksi" #: build/models.py:174 build/templates/build/build_base.html:172 #: build/templates/build/detail.html:87 msgid "Parent Build" -msgstr "" +msgstr "Produksi Induk" #: build/models.py:175 msgid "BuildOrder to which this build is allocated" -msgstr "" +msgstr "Produksi induk dari produksi ini" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -833,124 +813,124 @@ msgstr "" #: templates/js/translated/stock.js:1700 templates/js/translated/stock.js:2512 #: templates/js/translated/stock.js:2707 templates/js/translated/stock.js:2841 msgid "Part" -msgstr "" +msgstr "Bagian" #: build/models.py:188 msgid "Select part to build" -msgstr "" +msgstr "Pilih bagian untuk diproduksi" #: build/models.py:193 msgid "Sales Order Reference" -msgstr "" +msgstr "Referensi Order Penjualan" #: build/models.py:197 msgid "SalesOrder to which this build is allocated" -msgstr "" +msgstr "Order penjualan yang teralokasikan ke pesanan ini" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" -msgstr "" +msgstr "Lokasi Sumber" #: build/models.py:206 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" -msgstr "" +msgstr "Pilih dari lokasi mana stok akan diambil untuk produksi ini (kosongkan untuk mengambil stok dari mana pun)" #: build/models.py:211 msgid "Destination Location" -msgstr "" +msgstr "Lokasi Tujuan" #: build/models.py:215 msgid "Select location where the completed items will be stored" -msgstr "" +msgstr "Pilih lokasi di mana item selesai akan disimpan" #: build/models.py:219 msgid "Build Quantity" -msgstr "" +msgstr "Jumlah Produksi" #: build/models.py:222 msgid "Number of stock items to build" -msgstr "" +msgstr "Jumlah item stok yang akan dibuat" #: build/models.py:226 msgid "Completed items" -msgstr "" +msgstr "Item selesai" #: build/models.py:228 msgid "Number of stock items which have been completed" -msgstr "" +msgstr "Jumlah stok item yang telah diselesaikan" #: build/models.py:232 msgid "Build Status" -msgstr "" +msgstr "Status pembuatan" #: build/models.py:236 msgid "Build status code" -msgstr "" +msgstr "Kode status pembuatan" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" -msgstr "" +msgstr "Kode Kelompok" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" -msgstr "" +msgstr "Kode kelompok untuk hasil produksi ini" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" -msgstr "" +msgstr "Tanggal Pembuatan" #: build/models.py:256 order/models.py:662 msgid "Target completion date" -msgstr "" +msgstr "Target tanggal selesai" #: build/models.py:257 msgid "Target date for build completion. Build will be overdue after this date." -msgstr "" +msgstr "Target tanggal selesai produksi. Produksi akan menjadi terlambat setelah tanggal ini." #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" -msgstr "" +msgstr "Tanggal selesai" #: build/models.py:266 msgid "completed by" -msgstr "" +msgstr "diselesaikan oleh" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" -msgstr "" +msgstr "Diserahkan oleh" #: build/models.py:275 msgid "User who issued this build order" -msgstr "" +msgstr "Pengguna yang menyerahkan order ini" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" -msgstr "" +msgstr "Penanggung Jawab" #: build/models.py:284 msgid "User responsible for this build order" -msgstr "" +msgstr "Pengguna yang bertanggung jawab atas order ini" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" -msgstr "" +msgstr "Tautan eksternal" #: build/models.py:294 msgid "Extra build notes" -msgstr "" +msgstr "Catatan tambahan produksi" #: build/models.py:532 #, python-brace-format @@ -963,19 +943,19 @@ msgstr "" #: build/models.py:717 msgid "No build output specified" -msgstr "" +msgstr "Tidak ada hasil produksi yang ditentukan" #: build/models.py:720 msgid "Build output is already completed" -msgstr "" +msgstr "Hasil produksi sudah selesai" #: build/models.py:723 msgid "Build output does not match Build Order" -msgstr "" +msgstr "Hasil produksi tidak sesuai dengan order produksi" #: build/models.py:1172 msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "" +msgstr "Item produksi harus menentukan hasil produksi karena bagian utama telah ditandai sebagai dapat dilacak" #: build/models.py:1181 #, python-brace-format @@ -984,57 +964,57 @@ msgstr "" #: build/models.py:1191 order/models.py:1393 msgid "Stock item is over-allocated" -msgstr "" +msgstr "Item stok teralokasikan terlalu banyak" #: build/models.py:1197 order/models.py:1396 msgid "Allocation quantity must be greater than zero" -msgstr "" +msgstr "Jumlah yang dialokasikan harus lebih dari nol" #: build/models.py:1203 msgid "Quantity must be 1 for serialized stock" -msgstr "" +msgstr "Jumlah harus 1 untuk stok dengan nomor seri" #: build/models.py:1260 msgid "Selected stock item not found in BOM" -msgstr "" +msgstr "Item stok yang dipilih tidak ditemukan dalam daftar barang order" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" -msgstr "" +msgstr "Produksi" #: build/models.py:1330 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 #: templates/js/translated/stock.js:587 templates/js/translated/stock.js:752 #: templates/js/translated/stock.js:2585 msgid "Stock Item" -msgstr "" +msgstr "Stok Item" #: build/models.py:1347 msgid "Source stock item" -msgstr "" +msgstr "Sumber stok item" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1062,260 +1042,260 @@ msgstr "" #: templates/js/translated/stock.js:612 templates/js/translated/stock.js:782 #: templates/js/translated/stock.js:2634 templates/js/translated/stock.js:2719 msgid "Quantity" -msgstr "" +msgstr "Jumlah" #: build/models.py:1360 msgid "Stock quantity to allocate to build" -msgstr "" +msgstr "Jumlah stok yang dialokasikan ke produksi" #: build/models.py:1368 msgid "Install into" -msgstr "" +msgstr "Pasang ke" #: build/models.py:1369 msgid "Destination stock item" -msgstr "" +msgstr "Tujuan stok item" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" -msgstr "" +msgstr "Hasil Produksi" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" -msgstr "" +msgstr "Hasil produksi tidak sesuai dengan produksi induk" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" -msgstr "" +msgstr "Hasil bagian tidak sesuai dengan bagian dalam order produksi" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" -msgstr "" +msgstr "Hasil produksi ini sudah diselesaikan" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" -msgstr "" +msgstr "Hasil produksi tidak dialokasikan sepenuhnya" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" -msgstr "" +msgstr "Masukkan jumlah hasil pesanan" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" -msgstr "" +msgstr "Jumlah harus lebih besar daripada nol" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" -msgstr "" +msgstr "Jumlah bagian yang dapat dilacak harus berupa angka bulat" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" -msgstr "" +msgstr "Jumlah harus angka bulat karena terdapat bagian yang dapat dilacak dalam daftar barang" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" -msgstr "" +msgstr "Nomor Seri" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" -msgstr "" +msgstr "Masukkan nomor seri untuk hasil pesanan" + +#: build/serializers.py:245 +msgid "Auto Allocate Serial Numbers" +msgstr "Alokasikan nomor seri secara otomatis" #: build/serializers.py:246 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:247 msgid "Automatically allocate required items with matching serial numbers" +msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis" + +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" -msgstr "" - -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" -msgstr "" +msgstr "Daftar hasil pesanan harus disediakan" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 #: templates/js/translated/stock.js:753 templates/js/translated/stock.js:960 #: templates/js/translated/stock.js:1856 templates/js/translated/stock.js:2526 msgid "Location" -msgstr "" +msgstr "Lokasi" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" -msgstr "" +msgstr "Lokasi hasil pesanan yang selesai" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" -msgstr "" +msgstr "Status" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" -msgstr "" +msgstr "Terima Alokasi Tidak Lengkap" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" -msgstr "" +msgstr "Terima Tidak Teralokasikan" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "" +msgstr "Terima bahwa stok item tidak teralokasikan sepenuhnya ke pesanan ini" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" -msgstr "" +msgstr "Stok yang diperlukan belum teralokasikan sepenuhnya" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" -msgstr "" +msgstr "Terima Tidak Selesai" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" -msgstr "" +msgstr "Terima bahwa jumlah hasil produksi yang diperlukan belum selesai" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" -msgstr "" +msgstr "Jumlah produksi yang diperlukan masih belum cukup" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" -msgstr "" +msgstr "Order memiliki hasil produksi yang belum dilengkapi" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" -msgstr "" +msgstr "Item tagihan material" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" -msgstr "" +msgstr "Hasil produksi" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" -msgstr "" +msgstr "Hasil pesanan harus mengarah ke pesanan yang sama" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" -msgstr "" +msgstr "bom_item.part harus mengarah ke bagian yang sesuai dengan order produksi" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" -msgstr "" +msgstr "Item harus tersedia dalam stok" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" -msgstr "" +msgstr "Jumlah tersedia ({q}) terlampaui" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" -msgstr "" +msgstr "Hasil produksi harus ditentukan untuk mengalokasikan bagian yang terlacak" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" -msgstr "" +msgstr "Hasil produksi tidak dapat ditentukan untuk alokasi barang yang tidak terlacak" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" -msgstr "" +msgstr "Stok item ini telah dialokasikan ke hasil produksi ini" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" -msgstr "" +msgstr "Item yang dialokasikan harus disediakan" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" -msgstr "" +msgstr "Lokasi stok, dari mana bahan/bagian akan diambilkan (kosongkan untuk mengambil dari lokasi mana pun)" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" -msgstr "" +msgstr "Lokasi tidak termasuk" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" -msgstr "" +msgstr "Jangan ambil stok item dari lokasi yang dipilih" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" -msgstr "" +msgstr "Stok bergantian" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" -msgstr "" +msgstr "Item stok di beberapa lokasi dapat digunakan secara bergantian" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" -msgstr "" +msgstr "Stok pengganti" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" -msgstr "" +msgstr "Izinkan alokasi bagian pengganti" #: build/tasks.py:100 msgid "Stock required for build order" -msgstr "" +msgstr "Stok dibutuhkan untuk order produksi" #: build/tasks.py:118 msgid "Overdue Build Order" @@ -1330,23 +1310,23 @@ msgstr "" #: order/templates/order/order_base.html:28 #: order/templates/order/sales_order_base.html:38 msgid "Print actions" -msgstr "" +msgstr "Cetak aksi" #: build/templates/build/build_base.html:43 msgid "Print build order report" -msgstr "" +msgstr "Cetak laporan order produksi" #: build/templates/build/build_base.html:50 msgid "Build actions" -msgstr "" +msgstr "Aksi produksi" #: build/templates/build/build_base.html:54 msgid "Edit Build" -msgstr "" +msgstr "Ubah Produksi" #: build/templates/build/build_base.html:56 msgid "Cancel Build" -msgstr "" +msgstr "Batalkan Produksi" #: build/templates/build/build_base.html:59 msgid "Duplicate Build" @@ -1354,20 +1334,20 @@ msgstr "" #: build/templates/build/build_base.html:62 msgid "Delete Build" -msgstr "" +msgstr "Hapus Produksi" #: build/templates/build/build_base.html:67 #: build/templates/build/build_base.html:68 msgid "Complete Build" -msgstr "" +msgstr "Selesaikan Produksi" #: build/templates/build/build_base.html:90 msgid "Build Description" -msgstr "" +msgstr "Deskripsi Produksi" #: build/templates/build/build_base.html:98 msgid "No build outputs have been created for this build order" -msgstr "" +msgstr "Tidak ada hasil pesanan yang dibuat oleh pesanan ini" #: build/templates/build/build_base.html:104 #, python-format @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" +#: common/models.py:890 +msgid "Automatic Backup" msgstr "" #: common/models.py:891 -msgid "Enable barcode scanner support" +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:897 -msgid "Barcode Webcam Support" +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 +msgid "Barcode Support" msgstr "" #: common/models.py:898 -msgid "Allow barcode scanning via webcam in browser" +msgid "Enable barcode scanner support" msgstr "" #: common/models.py:904 -msgid "IPN Regex" +msgid "Barcode Webcam Support" msgstr "" #: common/models.py:905 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:911 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" +msgid "Enable registration" msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" +msgid "Email required" msgstr "" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "" @@ -2867,9 +2867,9 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "" @@ -3157,7 +3157,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "Tidak ada tindakan yang ditentukan" msgid "No matching action found" msgstr "Aksi tidak ditemukan" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/it/LC_MESSAGES/django.po b/InvenTree/locale/it/LC_MESSAGES/django.po index 68e8e43b42..166c2fa466 100644 --- a/InvenTree/locale/it/LC_MESSAGES/django.po +++ b/InvenTree/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -25,22 +25,22 @@ msgstr "Endpoint API non trovato" msgid "Error details can be found in the admin panel" msgstr "I dettagli dell'errore possono essere trovati nel pannello di amministrazione" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Inserisci la data" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "L'URL fornito non è un file immagine valido" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "Seriale duplicato: {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "Quantità inserita non valida" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Numero seriale vuoto" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Range gruppo: {g}" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "Gruppo non valido: {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Sequenza gruppo non valida: {g}" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "Gruppo {group} invalido o inesistente" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "Nessun numero di serie trovato" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Il numero dei numeri seriali univoci ({s}) deve essere uguale alla quantità ({q})" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "File mancante" msgid "Missing external link" msgstr "Link esterno mancante" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "Seleziona file da allegare" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "Seleziona file da allegare" msgid "Link" msgstr "Collegamento" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "Link a URL esterno" @@ -234,10 +223,10 @@ msgstr "Commento" msgid "File comment" msgstr "Commento del file" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "Errore nella rinominazione del file" msgid "Invalid choice" msgstr "Scelta non valida" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "Nome" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "Nome" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "Errore del server" msgid "An error has been logged by the server." msgstr "Un errore è stato loggato dal server." -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "Deve essere un numero valido" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "Ceco" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "Tedesco" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "Greco" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "Inglese" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "Spagnolo" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "Spagnolo (Messicano)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "Farsi / Persiano" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "Francese" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "Ebraico" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "Ungherese" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "Italiano" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "Giapponese" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "Coreano" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "Olandese" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "Norvegese" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "Polacco" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "Portoghese" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "Portoghese (Brasile)" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "Russo" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "Svedese" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "Thailandese" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "Turco" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "Vietnamita" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "Cinese" @@ -688,33 +677,24 @@ msgstr "Ricevuto contro l'ordine di acquisto" msgid "Production" msgstr "Produzione" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "Non è un codice valuta valido" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "Carattere non valido nel nome del file" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "IPN deve corrispondere al modello regex {pat}" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "Il campo deve corrispondere con il modello {pattern}" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "Il sovra-valore non può essere negativo" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "L'eccesso non deve superare il 100%" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "Numero di riferimento ordine di vendita" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "Posizione Di Origine" @@ -888,16 +868,16 @@ msgstr "Stato Build" msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "Codice Lotto" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "Data di creazione" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "Data di completamento" @@ -919,7 +899,7 @@ msgstr "Data di completamento" msgid "completed by" msgstr "Completato da" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "Rilasciato da" @@ -930,9 +910,9 @@ msgstr "" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "Responsabile" @@ -943,7 +923,7 @@ msgstr "" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "Collegamento esterno" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "Articolo in giacenza selezionato non trovato nel BOM" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "Produzione" @@ -1008,13 +988,13 @@ msgstr "Produzione" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "Articoli in magazzino" msgid "Source stock item" msgstr "Origine giacenza articolo" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "Origine giacenza articolo" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "Installa in" msgid "Destination stock item" msgstr "Destinazione articolo in giacenza" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "Inserisci la quantità per l'output di compilazione" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "Codice Seriale" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "Inserisci i numeri di serie per gli output di compilazione (build option)" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" -msgstr "I seguenti numeri di serie sono già esistenti" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" +msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "Posizione" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "Posizione per gli output di build completati" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "Stato" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "Distinta base (Bom)" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "Deve essere indicata l'allocazione dell'articolo" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "Lotto" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "Creato" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "Assegnazione Completa" msgid "All untracked stock items have been allocated" msgstr "Tutte le giacenze non tracciate sono state assegnate" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 +#: common/models.py:890 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:891 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 msgid "Barcode Support" msgstr "Supporto Codice A Barre" -#: common/models.py:891 +#: common/models.py:898 msgid "Enable barcode scanner support" msgstr "Abilita supporto scanner codici a barre" -#: common/models.py:897 +#: common/models.py:904 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:898 +#: common/models.py:905 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:904 +#: common/models.py:911 msgid "IPN Regex" msgstr "" -#: common/models.py:905 +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "Schema di espressione regolare per l'articolo corrispondente IPN" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "Consenti duplicati IPN" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "Permetti a più articoli di condividere lo stesso IPN" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "Permetti modifiche al part number interno (IPN)" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "Consenti di modificare il valore del part number durante la modifica di un articolo" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "Copia I Dati Della distinta base dell'articolo" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "Copia I Dati Parametro dell'articolo" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "Copia i dati dei parametri di default quando si duplica un articolo" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "Copia i dati di prova di default quando si duplica un articolo" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "Copia Template Parametri Categoria" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "Copia i modelli dei parametri categoria quando si crea un articolo" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "Gli articoli sono modelli per impostazione predefinita" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "Assemblaggio" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "Gli articoli possono essere assemblate da altri componenti per impostazione predefinita" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "Componente" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "Gli articoli possono essere assemblati da altri componenti per impostazione predefinita" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "Acquistabile" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "Vendibile" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "Tracciabile" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "Gli articoli sono tracciabili per impostazione predefinita" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "Virtuale" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "Gli articoli sono virtuali per impostazione predefinita" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "Mostra l'importazione nelle viste" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "Mostra la procedura guidata di importazione in alcune viste articoli" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "Mostra il prezzo nei moduli" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "Mostra il prezzo dell'articolo in alcuni moduli" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "Mostra il prezzo nella BOM" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "Includi le informazioni sui prezzi nelle tabelle BOM" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "Mostra articoli correlati" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "Visualizza parti correlate per ogni articolo" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "Crea giacenza iniziale" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "Crea giacenza iniziale sulla creazione articolo" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "Prezzi interni" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "Abilita prezzi interni per gli articoli" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "Prezzo interno come BOM-Price" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "Utilizzare il prezzo interno (se impostato) nel calcolo del prezzo BOM" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "Formato di visualizzazione del nome articolo" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "Formato per visualizzare il nome dell'articolo" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "Abilita Report di Stampa" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "Abilita generazione di report di stampa" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "Modalità Debug" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "Genera report in modalità debug (output HTML)" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "Dimensioni pagina" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "Dimensione predefinita della pagina per i report PDF" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "Abilita generazione di stampe di prova" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 +#: common/models.py:1143 +msgid "Globally Unique Serials" +msgstr "" + +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" +msgstr "" + +#: common/models.py:1150 msgid "Batch Code Template" msgstr "" -#: common/models.py:1137 +#: common/models.py:1151 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1142 +#: common/models.py:1156 msgid "Stock Expiry" msgstr "Scadenza giacenza" -#: common/models.py:1143 +#: common/models.py:1157 msgid "Enable stock expiry functionality" msgstr "Abilita funzionalità di scadenza della giacenza" -#: common/models.py:1149 +#: common/models.py:1163 msgid "Sell Expired Stock" msgstr "Vendi giacenza scaduta" -#: common/models.py:1150 +#: common/models.py:1164 msgid "Allow sale of expired stock" msgstr "Consenti la vendita di stock scaduti" -#: common/models.py:1156 +#: common/models.py:1170 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1157 +#: common/models.py:1171 msgid "Number of days stock items are considered stale before expiring" msgstr "Numero di giorni in cui gli articoli in magazzino sono considerati obsoleti prima della scadenza" -#: common/models.py:1159 +#: common/models.py:1173 msgid "days" msgstr "giorni" -#: common/models.py:1164 +#: common/models.py:1178 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1165 +#: common/models.py:1179 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1171 +#: common/models.py:1185 msgid "Stock Ownership Control" msgstr "Controllo della proprietà della giacenza" -#: common/models.py:1172 +#: common/models.py:1186 msgid "Enable ownership control over stock locations and items" msgstr "Abilita il controllo della proprietà sulle posizioni e gli oggetti in giacenza" -#: common/models.py:1178 +#: common/models.py:1192 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1179 +#: common/models.py:1193 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1184 +#: common/models.py:1198 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1185 +#: common/models.py:1199 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1191 +#: common/models.py:1205 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1192 +#: common/models.py:1206 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1198 +#: common/models.py:1212 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1199 +#: common/models.py:1213 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1205 +#: common/models.py:1219 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1206 +#: common/models.py:1220 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1213 +#: common/models.py:1227 msgid "Enable password forgot" msgstr "Abilita password dimenticata" -#: common/models.py:1214 +#: common/models.py:1228 msgid "Enable password forgot function on the login pages" msgstr "Abilita la funzione password dimenticata nelle pagine di accesso" -#: common/models.py:1220 +#: common/models.py:1234 msgid "Enable registration" msgstr "Abilita registrazione" -#: common/models.py:1221 +#: common/models.py:1235 msgid "Enable self-registration for users on the login pages" msgstr "Abilita auto-registrazione per gli utenti nelle pagine di accesso" -#: common/models.py:1227 +#: common/models.py:1241 msgid "Enable SSO" msgstr "SSO abilitato" -#: common/models.py:1228 +#: common/models.py:1242 msgid "Enable SSO on the login pages" msgstr "Abilita SSO nelle pagine di accesso" -#: common/models.py:1234 +#: common/models.py:1248 msgid "Email required" msgstr "Email richiesta" -#: common/models.py:1235 +#: common/models.py:1249 msgid "Require user to supply mail on signup" msgstr "Richiedi all'utente di fornire una email al momento dell'iscrizione" -#: common/models.py:1241 +#: common/models.py:1255 msgid "Auto-fill SSO users" msgstr "Riempimento automatico degli utenti SSO" -#: common/models.py:1242 +#: common/models.py:1256 msgid "Automatically fill out user-details from SSO account-data" msgstr "Compila automaticamente i dettagli dell'utente dai dati dell'account SSO" -#: common/models.py:1248 +#: common/models.py:1262 msgid "Mail twice" msgstr "" -#: common/models.py:1249 +#: common/models.py:1263 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1255 +#: common/models.py:1269 msgid "Password twice" msgstr "" -#: common/models.py:1256 +#: common/models.py:1270 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1262 +#: common/models.py:1276 msgid "Group on signup" msgstr "" -#: common/models.py:1263 +#: common/models.py:1277 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1269 +#: common/models.py:1283 msgid "Enforce MFA" msgstr "" -#: common/models.py:1270 +#: common/models.py:1284 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1276 +#: common/models.py:1290 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1277 +#: common/models.py:1291 msgid "Check that all plugins are installed on startup - enable in container enviroments" msgstr "" -#: common/models.py:1284 +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "Tasto impostazioni (deve essere univoco - maiuscole e minuscole" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "Mostra le categorie sottoscritte" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "Mostra le categorie dei componenti sottoscritti nella homepage" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "Mostra ultimi articoli" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Visualizza le etichette PDF nel browser, invece di scaricare come file" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Visualizza le etichette PDF nel browser, invece di scaricare come file" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "Risultati Dell'Anteprima Di Ricerca" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "Prezzo" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "Attivo" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "Token" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "Punto di contatto" msgid "Link to external company information" msgstr "Collegamento alle informazioni aziendali esterne" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "Immagine" @@ -2867,9 +2867,9 @@ msgstr "Valuta" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "Articolo di base" @@ -2928,7 +2928,7 @@ msgstr "Nome parametro" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "Valore" msgid "Parameter value" msgstr "Valore del parametro" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "Descrizione articolo fornitore" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "Nota" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "costo base" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "Confezionamento" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "multiplo" @@ -3042,8 +3042,8 @@ msgstr "Ordine multiplo" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "Scarica immagine dall'URL" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "Telefono" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "Carica immagine" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "Download Immagine" @@ -3157,7 +3157,7 @@ msgstr "Crea nuovo fornitore" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "Nuovo fornitore articolo" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "Fornitori" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "Elimina articolo fornitore" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "Elimina il parametro" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "Aggiungi parametro" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantità di ripartizione non puo' superare la disponibilità della giacenza" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "La destinazione deve essere specificata" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "Seleziona l'articolo del fornitore" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "Specifica la posizione per lo stock iniziale" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "Posizione Predefinita" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "Disponibilità in magazzino" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Categoria Articoli" @@ -4475,56 +4475,48 @@ msgstr "Scelta non valida per l'articolo principale" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" -msgstr "I successivi numeri di serie disponibili sono" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" +msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "Il prossimo numero di serie disponibile è" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "Il numero di serie più recente è" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "Non è consentito duplicare IPN nelle impostazioni dell'articolo" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "Nome articolo" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "È Template" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "Quest'articolo è un articolo di template?" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "Questa parte è una variante di un altro articolo?" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "Variante Di" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "Descrizione articolo" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "Parole Chiave" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" msgid "Category" msgstr "Categoria" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "Categoria articolo" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "IPN - Numero di riferimento interno" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "Numero Dell'articolo Interno" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "Numero di revisione o di versione" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "Revisione" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "Dove viene normalmente immagazzinato questo articolo?" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "Fornitore predefinito" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "Articolo fornitore predefinito" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "Scadenza Predefinita" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "Scadenza (in giorni) per gli articoli in giacenza di questo pezzo" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "Scorta Minima" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "Livello minimo di giacenza consentito" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "Unità di conservazione delle scorte per quest'articolo" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "Quest'articolo può essere acquistato da fornitori esterni?" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "Questo pezzo può essere venduto ai clienti?" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "Quest'articolo è attivo?" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "È una parte virtuale, come un prodotto software o una licenza?" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "Descrizione Di Prova" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "Codice Articolo" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "Consenti Le Varianti" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "Articoli (incluse le sottocategorie)" msgid "Create new part" msgstr "Crea nuovo articolo" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "Nuovo articolo" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "Opzioni" @@ -5194,7 +5186,7 @@ msgstr "Distinta base" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "Fornitori articoli" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "Componenti Produttori" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "Articoli correlati" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "Inattivo" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "Costo Totale" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "Nessuna azione specificata" msgid "No matching action found" msgstr "Nessuna azione corrispondente trovata" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "È necessario fornire il parametro barcode_data" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "Nessuna corrispondenza trovata per i dati del codice a barre" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "Corrispondenza trovata per i dati del codice a barre" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "Seleziona Owner" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "Articolo base" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Ubicazione magazzino" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "Installato In" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "Quantità disponibile" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "Data di Scadenza" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "Elimina al esaurimento" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "Posizione magazzino di destinazione" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "Numeri di serie già esistenti" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "Nessuna posizione impostata" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "Quantità richiesta" @@ -8011,15 +8001,19 @@ msgstr "Controlla Nella Posizione" msgid "Barcode does not match a valid location" msgstr "Il codice a barre non corrisponde a una posizione valida" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "Chiudi" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "Formato" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "Posizione non specificata" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "Modifica allocazione magazzino" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "Elimina posizione giacenza" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "Modifica Posizione" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "Rimuovi Posizione" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "Seleziona Articoli" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "Specificare il quantitativo assegnato allo stock" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "Seleziona la posizione di origine (lascia vuoto per prendere da tutte le posizioni)" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "Nessuna posizione di magazzino corrispondente" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "Inserisci un numero valido" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "Nessun risultato trovato" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "Ricerca" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "Cancella input" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/ja/LC_MESSAGES/django.po b/InvenTree/locale/ja/LC_MESSAGES/django.po index 87b1228f4d..2b7aba5b21 100644 --- a/InvenTree/locale/ja/LC_MESSAGES/django.po +++ b/InvenTree/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -25,22 +25,22 @@ msgstr "APIエンドポイントが見つかりません" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "日付を入力する" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "重複したシリアル番号: {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "数量コードが無効です" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "シリアル番号は空です" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "無効なグループ: {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "{group} は無効なグループか、存在しません。" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "シリアル番号が見つかりません" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "ファイルがありません" msgid "Missing external link" msgstr "外部リンクが見つかりません。" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "添付ファイルを選択" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "添付ファイルを選択" msgid "Link" msgstr "リンク" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "外部 サイト へのリンク" @@ -234,10 +223,10 @@ msgstr "コメント:" msgid "File comment" msgstr "ファイルコメント" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "ファイル名の変更に失敗しました" msgid "Invalid choice" msgstr "無効な選択です" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "お名前" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "お名前" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "有効な数字でなければなりません" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "ドイツ語" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "ギリシャ語" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "英語" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "スペイン語" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "スペイン語(メキシコ)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "フランス語" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "ヘブライ語" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "ハンガリー語" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "イタリア語" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "日本語" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "韓国語" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "オランダ語" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "ノルウェー語" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "ポーランド語" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "ロシア語" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "スウェーデン語" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "タイ語" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "トルコ語" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "ベトナム語" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "中国語" @@ -688,33 +677,24 @@ msgstr "" msgid "Production" msgstr "生産" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "" @@ -888,16 +868,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "作成日時" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "" @@ -919,7 +899,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "" @@ -930,9 +910,9 @@ msgstr "" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "" @@ -943,7 +923,7 @@ msgstr "" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "" @@ -1008,13 +988,13 @@ msgstr "" msgid "Build to allocate parts" msgstr "パーツを割り当てるためにビルドする" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "在庫商品" msgid "Source stock item" msgstr "" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "" msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "ステータス" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" +#: common/models.py:890 +msgid "Automatic Backup" msgstr "" #: common/models.py:891 -msgid "Enable barcode scanner support" +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:897 -msgid "Barcode Webcam Support" +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 +msgid "Barcode Support" msgstr "" #: common/models.py:898 -msgid "Allow barcode scanning via webcam in browser" +msgid "Enable barcode scanner support" msgstr "" #: common/models.py:904 -msgid "IPN Regex" +msgid "Barcode Webcam Support" msgstr "" #: common/models.py:905 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:911 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "テンプレート" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "パーツはデフォルトのテンプレートです" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "アセンブリ" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "コンポーネント" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "パーツはデフォルトでサブコンポーネントとして使用できます" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "購入可能" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "パーツはデフォルトで購入可能です" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "パーツはデフォルトで販売可能です" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "追跡可能" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "パーツはデフォルトで追跡可能です" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "デバッグモード" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" +msgid "Enable registration" msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" +msgid "Email required" msgstr "" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "メッセージ ID:" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "" @@ -2867,9 +2867,9 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "" @@ -3157,7 +3157,7 @@ msgstr "新しいサプライヤー・パーツを作成" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "新しいサプライヤー・パーツ" @@ -3186,7 +3186,7 @@ msgstr "メーカー・パーツ" msgid "Create new manufacturer part" msgstr "新しいメーカー・パーツを作成" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "新しいメーカ―・パーツ" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "カテゴリ" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "新規パーツ" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "アクションが指定されていません" msgid "No matching action found" msgstr "一致するアクションが見つかりませんでした" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/ko/LC_MESSAGES/django.po b/InvenTree/locale/ko/LC_MESSAGES/django.po index fe86e3bf92..72bb8d3371 100644 --- a/InvenTree/locale/ko/LC_MESSAGES/django.po +++ b/InvenTree/locale/ko/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -25,22 +25,22 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "첨부할 파일을 선택하세요" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "첨부할 파일을 선택하세요" msgid "Link" msgstr "링크" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "외부 URL로 링크" @@ -234,10 +223,10 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "파일 이름 바꾸기 오류" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "이름" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "이름" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "유효한 숫자여야 합니다" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "체코어" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "독일어" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "그리스어" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "영어" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "스페인어" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "스페인어 (멕시코)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "파르시어/페르시아어" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "프랑스어" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "히브리어" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "헝가리어" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "이탈리아어" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "일본어" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "한국어" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "네덜란드어" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "노르웨이어" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "폴란드어" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "러시아어" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "스웨덴어" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "태국어" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "터키어" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "베트남어" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "중국어" @@ -688,33 +677,24 @@ msgstr "" msgid "Production" msgstr "" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "" @@ -888,16 +868,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "" @@ -919,7 +899,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "" @@ -930,9 +910,9 @@ msgstr "" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "" @@ -943,7 +923,7 @@ msgstr "" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "외부 링크" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "" @@ -1008,13 +988,13 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "" msgid "Source stock item" msgstr "" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "" msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "수량 값은 0보다 커야 합니다" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "일련번호" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "위치" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "상태" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 +#: common/models.py:890 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:891 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 msgid "Barcode Support" msgstr "바코드 지원" -#: common/models.py:891 +#: common/models.py:898 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:897 +#: common/models.py:904 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:898 +#: common/models.py:905 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:904 +#: common/models.py:911 msgid "IPN Regex" msgstr "" -#: common/models.py:905 +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "구입 가능" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "판매 가능" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "디버그 모드" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "페이지 크기" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "PDF 보고서 기본 페이지 크기" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" -msgstr "SSO 활성화" +msgid "Enable password forgot" +msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" -msgstr "로그인 페이지에서 SSO 활성화" +msgid "Enable password forgot function on the login pages" +msgstr "" #: common/models.py:1234 -msgid "Email required" -msgstr "이메일 필요" +msgid "Enable registration" +msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" -msgstr "" +msgid "Enable SSO" +msgstr "SSO 활성화" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" -msgstr "" +msgid "Enable SSO on the login pages" +msgstr "로그인 페이지에서 SSO 활성화" #: common/models.py:1248 -msgid "Mail twice" -msgstr "두 번 보내기" +msgid "Email required" +msgstr "이메일 필요" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" -msgstr "" +msgid "Mail twice" +msgstr "두 번 보내기" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "이미지" @@ -2867,9 +2867,9 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "URL에서 이미지 다운로드" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "전화번호" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "이미지 업로드" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "이미지 다운로드" @@ -3157,7 +3157,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "이미 사용 중인 바코드입니다" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "데이터" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "부품 명세서" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "일련번호 검색" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "일련번호가 이미 존재합니다" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "메시지" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "선택" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/nl/LC_MESSAGES/django.po b/InvenTree/locale/nl/LC_MESSAGES/django.po index f48db6f47e..3d3627ebed 100644 --- a/InvenTree/locale/nl/LC_MESSAGES/django.po +++ b/InvenTree/locale/nl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -25,22 +25,22 @@ msgstr "API eindpunt niet gevonden" msgid "Error details can be found in the admin panel" msgstr "Error details kunnen worden gevonden in het admin scherm" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Voer datum in" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "Externe server heeft lege reactie teruggegeven" msgid "Supplied URL is not a valid image file" msgstr "Opgegeven URL is geen geldig afbeeldingsbestand" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "Duplicaat serienummer: {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "Ongeldige hoeveelheid ingevoerd" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Leeg serienummer" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Ongeldig groepsbereik: {g}" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "Ongeldige groep: {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Ongeldig groepsbereik: {g}" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "Ongeldige/geen groep {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "Geen serienummers gevonden" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Hoeveelheid van unieke serienummers ({s}) moet overeenkomen met de hoeveelheid ({q})" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "Ontbrekend bestand" msgid "Missing external link" msgstr "Externe link ontbreekt" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "Bestand als bijlage selecteren" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "Bestand als bijlage selecteren" msgid "Link" msgstr "Link" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "Link naar externe URL" @@ -234,10 +223,10 @@ msgstr "Opmerking" msgid "File comment" msgstr "Bestand opmerking" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "Fout bij hernoemen bestand" msgid "Invalid choice" msgstr "Ongeldige keuze" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "Naam" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "Naam" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "Serverfout" msgid "An error has been logged by the server." msgstr "Er is een fout gelogd door de server." -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "Moet een geldig nummer zijn" @@ -425,103 +414,103 @@ msgstr "URL van extern afbeeldingsbestand" msgid "Downloading images from remote URL is not enabled" msgstr "Afbeeldingen van externe URL downloaden is niet ingeschakeld" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "Tsjechisch" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "Duits" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "Grieks" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "Engels" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "Spaans" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "Spaans (Mexicaans)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "Farsi / Perzisch" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "Frans" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "Hebreeuws" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "Hongaars" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "Italiaans" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "Japans" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "Koreaans" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "Nederlands" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "Noors" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "Pools" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "Portugees" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "Portugees (Braziliaans)" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "Russisch" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "Zweeds" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "Thais" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "Turks" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "Vietnamees" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "Chinees" @@ -688,33 +677,24 @@ msgstr "Ontvangen tegen inkooporder" msgid "Production" msgstr "Productie" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "Geen geldige valutacode" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "Ongeldig teken in onderdeelnaam" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "IPN moet overeenkomen met regex-patroon {pat}" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "Referentie moet overeenkomen met patroon {pattern}" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "Overschotwaarde mag niet negatief zijn" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "Overschot mag niet groter zijn dan 100%" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "Ongeldige waarde voor overschot" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "Productieorderreferentie" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "Productieorder waar deze productie aan is toegewezen" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "Verkooporder Referentie" msgid "SalesOrder to which this build is allocated" msgstr "Verkooporder waar deze productie aan is toegewezen" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "Bronlocatie" @@ -888,16 +868,16 @@ msgstr "Productiestatus" msgid "Build status code" msgstr "Productiestatuscode" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "Batchcode" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "Batchcode voor deze productieuitvoer" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "Aanmaakdatum" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "Doeldatum voor productie voltooiing. Productie zal achterstallig zijn na deze datum." #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "Opleveringsdatum" @@ -919,7 +899,7 @@ msgstr "Opleveringsdatum" msgid "completed by" msgstr "voltooid door" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "Uitgegeven door" @@ -930,9 +910,9 @@ msgstr "Gebruiker die de productieorder heeft gegeven" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "Verantwoordelijke" @@ -943,7 +923,7 @@ msgstr "Gebruiker verantwoordelijk voor deze productieorder" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "Externe Link" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "Geselecteerd voorraadartikel niet gevonden in stuklijst" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "Product" @@ -1008,13 +988,13 @@ msgstr "Product" msgid "Build to allocate parts" msgstr "Product om onderdelen toe te wijzen" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "Voorraadartikel" msgid "Source stock item" msgstr "Bron voorraadartikel" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "Bron voorraadartikel" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "Installeren in" msgid "Destination stock item" msgstr "Bestemming voorraadartikel" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "Productieuitvoer" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "Productieuitvoer komt niet overeen met de bovenliggende productie" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "Uitvoeronderdeel komt niet overeen met productieorderonderdeel" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "Deze productieuitvoer is al voltooid" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "Deze productieuitvoer is niet volledig toegewezen" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "Voer hoeveelheid in voor productie uitvoer" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Geheel getal vereist omdat de stuklijst traceerbare onderdelen bevat" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "Serienummers" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "Voer serienummers in voor productieuitvoeren" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "Serienummers automatisch toewijzen" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" -msgstr "De volgende serienummers bestaan al" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" +msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "Een lijst van productieuitvoeren moet worden verstrekt" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "Een lijst van productieuitvoeren moet worden verstrekt" msgid "Location" msgstr "Locatie" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "Locatie van voltooide productieuitvoeren" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "Status" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "Incomplete Toewijzing Accepteren" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "Voltooi de uitvoer als de voorraad niet volledig is toegewezen" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "Toegewezen Voorraad Verwijderen" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "Verminder alle voorraad die al is toegewezen aan deze productie" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "Verwijder Incomplete Uitvoeren" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "Verwijder alle productieuitvoeren die niet zijn voltooid" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "Accepteer Niet-toegewezen" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accepteer dat voorraadartikelen niet volledig zijn toegewezen aan deze productieorder" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "Vereiste voorraad is niet volledig toegewezen" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "Accepteer Onvolledig" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "Accepteer dat het vereist aantal productieuitvoeren niet is voltooid" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "Vereiste productiehoeveelheid is voltooid" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "Productieorder heeft onvolledige uitvoeren" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "Stuklijstartikel" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "Productieuitvoer" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "Productieuitvoer moet naar dezelfde productie wijzen" -#: build/serializers.py:651 +#: build/serializers.py:654 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:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "Artikel moet op voorraad zijn" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Beschikbare hoeveelheid ({q}) overschreden" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "Productieuitvoer moet worden opgegeven voor de toewijzing van gevolgde onderdelen" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Productieuitvoer kan niet worden gespecificeerd voor de toewijzing van niet gevolgde onderdelen" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "Dit voorraadartikel is al toegewezen aan deze productieoutput" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "Allocaties voor artikelen moeten worden opgegeven" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Voorraadlocatie waar onderdelen afkomstig zijn (laat leeg om van elke locatie te nemen)" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "Locatie uitsluiten" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "Voorraadartikelen van deze geselecteerde locatie uitsluiten" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "Uitwisselbare voorraad" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Voorraadartikelen op meerdere locaties kunnen uitwisselbaar worden gebruikt" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "Vervangende Voorraad" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "Toewijzing van vervangende onderdelen toestaan" @@ -1400,7 +1380,7 @@ msgstr "Voorraad is niet volledig toegewezen aan deze productieorder" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "Batch" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "Gecreëerd" @@ -1510,7 +1490,7 @@ msgstr "Onderliggende Productieorders" msgid "Allocate Stock to Build" msgstr "Voorraad toewijzen aan Product" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "Voorraadtoewijzing ongedaan maken" @@ -1631,7 +1611,7 @@ msgstr "Toewijzing Voltooid" msgid "All untracked stock items have been allocated" msgstr "Alle niet gevolgde voorraadartikelen zijn toegewezen" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "Nieuwe Productieorder" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 +#: common/models.py:890 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:891 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 msgid "Barcode Support" msgstr "Streepjescodeondersteuning" -#: common/models.py:891 +#: common/models.py:898 msgid "Enable barcode scanner support" msgstr "Streepjescodescanner ondersteuning inschakelen" -#: common/models.py:897 +#: common/models.py:904 msgid "Barcode Webcam Support" msgstr "Barcode Webcam Ondersteuning" -#: common/models.py:898 +#: common/models.py:905 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode via webcam scannen in browser toestaan" -#: common/models.py:904 +#: common/models.py:911 msgid "IPN Regex" msgstr "IPN Regex" -#: common/models.py:905 +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulier expressiepatroon voor het overeenkomende Onderdeel IPN" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "Duplicaat IPN toestaan" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "Toestaan dat meerdere onderdelen dezelfde IPN gebruiken" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "Bewerken IPN toestaan" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "Sta het wijzigen van de IPN toe tijdens het bewerken van een onderdeel" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "Kopieer Onderdeel Stuklijstgegevens" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopieer standaard stuklijstgegevens bij het dupliceren van een onderdeel" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "Kopieer Onderdeel Parametergegevens" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "Parametergegevens standaard kopiëren bij het dupliceren van een onderdeel" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "Kopieer Onderdeel Testdata" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "Testdata standaard kopiëren bij het dupliceren van een onderdeel" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "Kopiëer Categorieparameter Sjablonen" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "Kopieer categorieparameter sjablonen bij het aanmaken van een onderdeel" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "Sjabloon" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "Onderdelen zijn standaard sjablonen" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "Samenstelling" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "Component" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "Onderdelen kunnen standaard worden gebruikt als subcomponenten" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "Koopbaar" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "Onderdelen kunnen standaard gekocht worden" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "Verkoopbaar" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "Onderdelen kunnen standaard verkocht worden" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "Volgbaar" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "Onderdelen kunnen standaard gevolgd worden" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "Virtueel" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "Onderdelen zijn standaard virtueel" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "Toon Import in Weergaven" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "Toon de importwizard in sommige onderdelenweergaven" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "Toon Prijs in Formulieren" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "Toon onderdeelprijs in sommige formulieren" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "Prijs in Stuklijst Weergeven" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "Prijsinformatie in Stuklijsttabellen opnemen" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "Toon Prijsgeschiedenis" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "Toon historische prijzen voor Onderdeel" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "Verwante onderdelen tonen" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "Verwante onderdelen voor een onderdeel tonen" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "Eerste voorraad aanmaken" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "Aanmaken eerste voorraad bij het maken van onderdeel" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "Interne Prijzen" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "Inschakelen van interne prijzen voor onderdelen" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "Interne Prijs als Stuklijst Prijs" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "Gebruik de interne prijs (indien ingesteld) in stuklijst prijsberekeningen" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "Onderdelennaam Weergaveopmaak" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "Opmaak om de onderdeelnaam weer te geven" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "Printen van labels Inschakelen" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "Printen van labels via de webinterface inschakelen" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "Label Afbeelding DPI" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI resolutie bij het genereren van afbeelginsbestanden voor label printer plugins" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "Activeer Rapportages" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "Activeer het genereren van rapporten" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "Foutopsporingsmodus" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "Rapporten genereren in debug modus (HTML uitvoer)" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "Paginagrootte" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "Standaard paginagrootte voor PDF rapporten" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "Activeer Testrapporten" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "Activeer het genereren van testrapporten" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "Testrapporten Toevoegen" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Bij het afdrukken van een Testrapport, voeg een kopie van het Testrapport toe aan het bijbehorende Voorraadartikel" -#: common/models.py:1136 +#: common/models.py:1143 +msgid "Globally Unique Serials" +msgstr "" + +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" +msgstr "" + +#: common/models.py:1150 msgid "Batch Code Template" msgstr "Batchcode Sjabloon" -#: common/models.py:1137 +#: common/models.py:1151 msgid "Template for generating default batch codes for stock items" msgstr "Sjabloon voor het genereren van standaard batchcodes voor voorraadartikelen" -#: common/models.py:1142 +#: common/models.py:1156 msgid "Stock Expiry" msgstr "Verlopen Voorraad" -#: common/models.py:1143 +#: common/models.py:1157 msgid "Enable stock expiry functionality" msgstr "Verlopen voorraad functionaliteit inschakelen" -#: common/models.py:1149 +#: common/models.py:1163 msgid "Sell Expired Stock" msgstr "Verkoop Verlopen Voorraad" -#: common/models.py:1150 +#: common/models.py:1164 msgid "Allow sale of expired stock" msgstr "Verkoop verlopen voorraad toestaan" -#: common/models.py:1156 +#: common/models.py:1170 msgid "Stock Stale Time" msgstr "Voorraad Vervaltijd" -#: common/models.py:1157 +#: common/models.py:1171 msgid "Number of days stock items are considered stale before expiring" msgstr "Aantal dagen voordat voorraadartikelen als verouderd worden beschouwd voor ze verlopen" -#: common/models.py:1159 +#: common/models.py:1173 msgid "days" msgstr "dagen" -#: common/models.py:1164 +#: common/models.py:1178 msgid "Build Expired Stock" msgstr "Produceer Verlopen Voorraad" -#: common/models.py:1165 +#: common/models.py:1179 msgid "Allow building with expired stock" msgstr "Sta productie met verlopen voorraad toe" -#: common/models.py:1171 +#: common/models.py:1185 msgid "Stock Ownership Control" msgstr "Voorraad Eigenaar Toezicht" -#: common/models.py:1172 +#: common/models.py:1186 msgid "Enable ownership control over stock locations and items" msgstr "Eigenaarstoezicht over voorraadlocaties en items inschakelen" -#: common/models.py:1178 +#: common/models.py:1192 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1179 +#: common/models.py:1193 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1184 +#: common/models.py:1198 msgid "Build Order Reference Pattern" msgstr "Productieorderreferentiepatroon" -#: common/models.py:1185 +#: common/models.py:1199 msgid "Required pattern for generating Build Order reference field" msgstr "Vereist patroon voor het genereren van het Bouworderreferentieveld" -#: common/models.py:1191 +#: common/models.py:1205 msgid "Sales Order Reference Pattern" msgstr "Verkooporderreferentiepatroon" -#: common/models.py:1192 +#: common/models.py:1206 msgid "Required pattern for generating Sales Order reference field" msgstr "Vereist patroon voor het genereren van het Verkooporderreferentieveld" -#: common/models.py:1198 +#: common/models.py:1212 msgid "Sales Order Default Shipment" msgstr "Standaard Verzending Verkooporder" -#: common/models.py:1199 +#: common/models.py:1213 msgid "Enable creation of default shipment with sales orders" msgstr "Aanmaken standaard verzending bij verkooporders inschakelen" -#: common/models.py:1205 +#: common/models.py:1219 msgid "Purchase Order Reference Pattern" msgstr "Inkooporderreferentiepatroon" -#: common/models.py:1206 +#: common/models.py:1220 msgid "Required pattern for generating Purchase Order reference field" msgstr "Vereist patroon voor het genereren van het Inkooporderreferentieveld" -#: common/models.py:1213 +#: common/models.py:1227 msgid "Enable password forgot" msgstr "Wachtwoord vergeten functie inschakelen" -#: common/models.py:1214 +#: common/models.py:1228 msgid "Enable password forgot function on the login pages" msgstr "Wachtwoord vergeten functie inschakelen op de inlogpagina's" -#: common/models.py:1220 +#: common/models.py:1234 msgid "Enable registration" msgstr "Registratie inschakelen" -#: common/models.py:1221 +#: common/models.py:1235 msgid "Enable self-registration for users on the login pages" msgstr "Zelfregistratie voor gebruikers op de inlogpagina's inschakelen" -#: common/models.py:1227 +#: common/models.py:1241 msgid "Enable SSO" msgstr "SSO inschakelen" -#: common/models.py:1228 +#: common/models.py:1242 msgid "Enable SSO on the login pages" msgstr "SSO inschakelen op de inlogpagina's" -#: common/models.py:1234 +#: common/models.py:1248 msgid "Email required" msgstr "E-mailadres verplicht" -#: common/models.py:1235 +#: common/models.py:1249 msgid "Require user to supply mail on signup" msgstr "Vereis gebruiker om e-mailadres te registreren bij aanmelding" -#: common/models.py:1241 +#: common/models.py:1255 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1242 +#: common/models.py:1256 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1248 +#: common/models.py:1262 msgid "Mail twice" msgstr "E-mail twee keer" -#: common/models.py:1249 +#: common/models.py:1263 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1255 +#: common/models.py:1269 msgid "Password twice" msgstr "" -#: common/models.py:1256 +#: common/models.py:1270 msgid "On signup ask users twice for their password" msgstr "Laat gebruikers twee keer om hun wachtwoord vragen tijdens het aanmelden" -#: common/models.py:1262 +#: common/models.py:1276 msgid "Group on signup" msgstr "Groep bij aanmelding" -#: common/models.py:1263 +#: common/models.py:1277 msgid "Group to which new users are assigned on registration" msgstr "Groep waaraan nieuwe gebruikers worden toegewezen bij registratie" -#: common/models.py:1269 +#: common/models.py:1283 msgid "Enforce MFA" msgstr "MFA afdwingen" -#: common/models.py:1270 +#: common/models.py:1284 msgid "Users must use multifactor security." msgstr "Gebruikers moeten multifactor-beveiliging gebruiken." -#: common/models.py:1276 +#: common/models.py:1290 msgid "Check plugins on startup" msgstr "Controleer plugins bij het opstarten" -#: common/models.py:1277 +#: common/models.py:1291 msgid "Check that all plugins are installed on startup - enable in container enviroments" msgstr "" -#: common/models.py:1284 +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "Activeer URL-integratie" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "Instellingssleutel (moet uniek zijn - hoofdletter ongevoelig" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "Toon laatste onderdelen" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "Toon laatste onderdelen op de startpagina" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "Recente Voorraadtelling" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "Toon recente voorraadwijzigingen" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "Toon recent aangepaste voorraadartikelen op de startpagina" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "Recente Voorraadtelling" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "Toon lage voorraad" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "Toon lage voorraad van artikelen op de startpagina" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "Toon lege voorraad" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "Toon lege voorraad van artikelen op de startpagina" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "Toon benodigde voorraad" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "Toon benodigde voorraad van artikelen voor productie op de startpagina" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "Toon verlopen voorraad" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "Toon verlopen voorraad van artikelen op de startpagina" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "Toon verouderde voorraad" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "Toon verouderde voorraad van artikelen op de startpagina" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "Toon openstaande producties" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "Toon openstaande producties op de startpagina" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "Toon achterstallige productie" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "Toon achterstallige producties op de startpagina" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "Toon uitstaande PO's" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "Toon uitstaande PO's op de startpagina" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "Toon achterstallige PO's" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "Toon achterstallige PO's op de startpagina" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "Toon uitstaande SO's" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "Toon uitstaande SO's op de startpagina" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "Toon achterstallige SO's" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "Toon achterstallige SO's op de startpagina" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "Zoek Onderdelen" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "Inactieve Onderdelen Verbergen" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "Zoek in Voorraad" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "Inkooporders Zoeken" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "Toon inkooporders in het zoekvenster" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "Inactieve Inkooporders Weglaten" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inactieve inkooporders weglaten in het zoekvenster" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "Verkooporders zoeken" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "Toon verkooporders in het zoekvenster" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "Inactieve Verkooporders Weglaten" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "Inactieve verkooporders weglaten in het zoekvenster" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "Prijs" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "Actief" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "Token" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "Token voor toegang" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "Geheim" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "Bericht ID" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "Host" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "Koptekst" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "Koptekst van dit bericht" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "Berichtinhoud" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "Inhoud van dit bericht" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "Artikelen zijn ontvangen tegen een inkooporder" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "Contactpunt" msgid "Link to external company information" msgstr "Link naar externe bedrijfsinformatie" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "Afbeelding" @@ -2867,9 +2867,9 @@ msgstr "Valuta" msgid "Default currency used for this company" msgstr "Standaardvaluta die gebruikt wordt voor dit bedrijf" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "Basis onderdeel" @@ -2928,7 +2928,7 @@ msgstr "Parameternaam" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "Waarde" msgid "Parameter value" msgstr "Parameterwaarde" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "Opmerking" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "basisprijs" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimale kosten (bijv. voorraadkosten)" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "meerdere" @@ -3042,8 +3042,8 @@ msgstr "Order meerdere" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "Afbeelding downloaden van URL" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "Telefoon" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "Afbeelding Uploaden" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "Afbeelding Downloaden" @@ -3157,7 +3157,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "Fabrikant onderdelen" msgid "Create new manufacturer part" msgstr "Maak nieuw fabrikant onderdeel" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "Nieuw fabrikant onderdeel" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "Nieuwe Verkooporder" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "Leveranciers" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "Verwijder leveranciersonderdelen" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "Parameter verwijderen" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "Parameter toevoegen" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "Toegewezen Voorraadartikelen" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "Ontvangen" msgid "Number of items received" msgstr "Aantal ontvangen artikelen" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "Gecontroleerd door" msgid "User who checked this shipment" msgstr "Gebruiker die deze zending gecontroleerd heeft" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "Zending" @@ -3909,7 +3909,7 @@ msgstr "Kan voorraad niet toewijzen aan een regel zonder onderdeel" msgid "Allocation quantity cannot exceed stock quantity" msgstr "Toewijzingshoeveelheid kan niet hoger zijn dan de voorraadhoeveelheid" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerd voorraadartikel" @@ -3949,11 +3949,11 @@ msgstr "Prijs valuta" msgid "Order cannot be cancelled" msgstr "Order kan niet worden geannuleerd" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "De leverancier moet overeenkomen met de inkooporder" msgid "Purchase order must match supplier" msgstr "Inkooporder moet overeenkomen met de leverancier" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "Artikel" @@ -3989,7 +3989,7 @@ msgstr "Artikel" msgid "Line item does not match purchase order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "Selecteer bestemmingslocatie voor ontvangen artikelen" @@ -4013,51 +4013,51 @@ msgstr "Streepjescode is al in gebruik" msgid "An integer quantity must be provided for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "Artikelen moeten worden opgegeven" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "Bestemmingslocatie moet worden opgegeven" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "Geleverde streepjescodewaarden moeten uniek zijn" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "Valuta verkoopprijs" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "Geen verzenddetails opgegeven" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "Artikelregel is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "Hoeveelheid moet positief zijn" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "Voer serienummers in om toe te wijzen" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "Verzending is al verzonden" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "Zending is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "Geen overeenkomst gevonden voor de volgende serienummers" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "De volgende serienummers zijn al toegewezen" @@ -4070,11 +4070,11 @@ msgstr "Achterstallige inkooporder" msgid "Purchase order {po} is now overdue" msgstr "Inkooporder {po} is nu achterstallig" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "Achterstallige Verkooporder" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Verkooporder {so} is nu achterstallig" @@ -4200,8 +4200,8 @@ msgstr "Selecteer Leveranciersonderdeel" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "Verzendingen in behandeling" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "Acties" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "Standaard locatie" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "Beschikbare Voorraad" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "De template van de parameter moet uniek zijn" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "Parameternaam" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "Parameter Eenheden" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "Parameter Template" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "Parameterwaarde" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "Standaard Parameter Waarde" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "Nieuw Stuklijstartikel" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "Assemblages" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "Productieordertoewijzingen" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "Onderdeelfabrikanten" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "Fabrikantonderdeel verwijderen" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "Toegewezen aan Productieorder" msgid "Allocated to Sales Orders" msgstr "Toegewezen aan verkooporders" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "Geen overeenkomende afbeeldingen gevonden" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "Geen actie gespecificeerd" msgid "No matching action found" msgstr "Geen overeenkomende actie gevonden" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "De parameter barcode_data moet worden aangeleverd" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "Geen overeenkomst gevonden voor streepjescodegegevens" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "Overeenkomst gevonden voor streepjescodegegevens" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Voorraadlocatie" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "Inkooporder Bron" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "Inkooporder voor dit voorraadartikel" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "Bestemming Verkooporder" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "Voorraadartikel is toegewezen aan een verkooporder" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "Artikel is toegewezen aan een verkooporder" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "Artikel is toegewezen aan een productieorder" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "Geen locatie ingesteld" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "Bericht" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,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:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "Vereiste Hoeveelheid" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "Sluit" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "Formaat" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "Selecteer bestandsindeling" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "Voeg Fabrikantgegevens toe" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "Voeg onderdeelfabrikantgegevens toe aan geëxporteerde stuklijst" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "Geen Voorraad Aanwezig" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "Gemiddelde inkoopprijs" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "Locatie is niet opgegeven" msgid "No active build outputs found" msgstr "Geen actieve productieuitvoeren gevonden" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "Voorraadtoewijzing bewerken" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "Voorraadtoewijzing verwijderen" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "Onvoldoende voorraad beschikbaar" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "Genoeg voorraad beschikbaar" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "Toegewezen" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "Productie voorraad" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "Voorraad order" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "Voorraad toewijzen" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "Onderdelen selecteren" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "Er moet op zijn minst één onderdeel toegewezen worden" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "Specificeer voorraadtoewijzingshoeveelheid" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "Selecteer bron locatie (laat het veld leeg om iedere locatie te gebruiken)" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "Voorraadartikelen toewijzen aan Productieorder" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "Geen overeenkomende voorraadlocaties" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "Geen overeenkomende voorraadartikelen" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "Voorraadartikelen zullen automatisch worden toegewezen aan de productieorder volgens de aangegeven richtlijnen" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "Productieorder is achterstallig" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/no/LC_MESSAGES/django.po b/InvenTree/locale/no/LC_MESSAGES/django.po index 2832382fe7..7dfc4c8b5b 100644 --- a/InvenTree/locale/no/LC_MESSAGES/django.po +++ b/InvenTree/locale/no/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -25,22 +25,22 @@ msgstr "API endepunkt ikke funnet" msgid "Error details can be found in the admin panel" msgstr "Feildetaljer kan ikke finnes i admin-panelet" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Oppgi dato" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "Ekstern server returnerte tomt svar" msgid "Supplied URL is not a valid image file" msgstr "Angitt URL er ikke en gyldig bildefil" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "Dupliser serie: {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "Ugyldig mengde oppgitt" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Tom serienummerstreng" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Ugyldig gruppeserie: {g}" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "Ugyldig gruppe: {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Ugyldig gruppesekvense: {g}" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "Ugyldig/ingen gruppe {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "Ingen serienummer funnet" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Antall unike serienumre ({s}) må samsvare med antall ({q})" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "Fil mangler" msgid "Missing external link" msgstr "Mangler eksternlenke" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "Velg fil å legge ved" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "Velg fil å legge ved" msgid "Link" msgstr "Lenke" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "Lenke til ekstern URL" @@ -234,10 +223,10 @@ msgstr "Kommenter" msgid "File comment" msgstr "Kommentar til fil" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "Feil ved endring av navn" msgid "Invalid choice" msgstr "Ugyldig valg" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "Navn" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "Navn" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "Nummer må være gyldig" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "Tsjekkisk" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "Tysk" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "Gresk" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "Engelsk" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "Spansk" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "Spansk (Meksikansk)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "Farsi / Persisk" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "Fransk" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "Hebraisk" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "Ungarsk" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "Italiensk" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "Japansk" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "Koreansk" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "Nederlandsk" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "Norsk" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "Polsk" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "Portugisisk" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "Portugisisk (Brasilian)" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "Russisk" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "Svensk" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "Thailandsk" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "Tyrkisk" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "Vietnamesisk" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "Kinesisk" @@ -688,33 +677,24 @@ msgstr "Mottatt mot innkjøpsordre" msgid "Production" msgstr "Produksjon" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "Ikke en gyldig valutanr" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "Ugylding tegn i varenavn" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "IPN må matche regex-mønster {pat}" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "Referansen må samsvare med mønster {pattern}" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "Overde-verdien må ikke være negativ" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "Overde må ikke overstige 100%" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "Bygg ordrereferanse" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "Build order som denne build er tildelt til" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "Salg order referanse" msgid "SalesOrder to which this build is allocated" msgstr "Salgorder som denne build er tildelt til" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "Kilde plassering" @@ -888,16 +868,16 @@ msgstr "Byggstatus" msgid "Build status code" msgstr "Byggstatuskode" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "Batch kode" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "Batch kode for denne build output" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "Opprettelsesdato" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "Forventet dato for ferdigstillelse. Build er forvalt etter denne datoen." #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "Fullført dato" @@ -919,7 +899,7 @@ msgstr "Fullført dato" msgid "completed by" msgstr "fullført av" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "Utstedt av" @@ -930,9 +910,9 @@ msgstr "Brukeren som utstede denne prosjekt order" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "Ansvarlig" @@ -943,7 +923,7 @@ msgstr "Bruker ansvarlig for denne prosjekt order" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "Ekstern link" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "Valgt lagevare ikke funnet i BOM" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "Prosjekt" @@ -1008,13 +988,13 @@ msgstr "Prosjekt" msgid "Build to allocate parts" msgstr "Bygge for å tildele deler" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "Lagervare" msgid "Source stock item" msgstr "Kilde lagervare" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "Kilde lagervare" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "Installerings informasjon" msgid "Destination stock item" msgstr "Målets lagervare" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "Angi antall for build utgang" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "Mengden må være større enn null" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "Angi serienummer for bygge-utganger" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "Beliggenhet" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "Påkrevd varer er ikke fullt tildelt" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "BOM varer" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "Varen må være på lager" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgjengelig mengde ({q}) overskredet" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "Opprettet" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "Fjern lager allokering" @@ -1631,7 +1611,7 @@ msgstr "Tildeling fullført" msgid "All untracked stock items have been allocated" msgstr "Alle usporbar lagervarer har tildelt" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 +#: common/models.py:890 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:891 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 msgid "Barcode Support" msgstr "Strekkode støtte" -#: common/models.py:891 +#: common/models.py:898 msgid "Enable barcode scanner support" msgstr "Aktiver skrekkodeleser støtte" -#: common/models.py:897 +#: common/models.py:904 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:898 +#: common/models.py:905 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:904 +#: common/models.py:911 msgid "IPN Regex" msgstr "" -#: common/models.py:905 +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "Tilat duplisert IPN" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "Tillat flere deler å dele samme IPN" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "Tillat redigering av IPN" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "Tillat å endre IPN-verdien mens du redigerer en del" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "Kopier testdata som standard ved duplisering av en del" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "Kopier kategori parametermaler ved oppretting av en del" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "Mal" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "Deler er maler som standard" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "Montering" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "Deler kan settes sammen fra andre komponenter som standard" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "Komponent" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "Deler kan bli brukt som underkomponenter som standard" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "Kjøpbar" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "Deler er kjøpbare som standard" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "Salgbar" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "Deler er salgbare som standard" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "Sporbar" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "Deler er sporbare som standard" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "Virtuelle" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "Deler er virtuelle som standard" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "Vis import i visninger" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "Vis importveiviseren i noen deler visninger" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "Vis pris i skjemaer" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "Vis delpris i noen skjemaer" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 +msgid "Enable creation of default shipment with sales orders" +msgstr "" + +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/models.py:1220 +msgid "Required pattern for generating Purchase Order reference field" +msgstr "" + +#: common/models.py:1227 msgid "Enable password forgot" msgstr "Aktiver passord glemt" -#: common/models.py:1214 +#: common/models.py:1228 msgid "Enable password forgot function on the login pages" msgstr "Ativer funskjon for glemt passord på innloggingssidene" -#: common/models.py:1220 +#: common/models.py:1234 msgid "Enable registration" msgstr "Aktiver registrering" -#: common/models.py:1221 +#: common/models.py:1235 msgid "Enable self-registration for users on the login pages" msgstr "Aktiver egenregistrerting for brukerer på påloggingssidene" -#: common/models.py:1227 +#: common/models.py:1241 msgid "Enable SSO" msgstr "Aktiver SSO" -#: common/models.py:1228 +#: common/models.py:1242 msgid "Enable SSO on the login pages" msgstr "Aktiver SSO på innloggingssidene" -#: common/models.py:1234 +#: common/models.py:1248 msgid "Email required" msgstr "E-postadresse kreves" -#: common/models.py:1235 +#: common/models.py:1249 msgid "Require user to supply mail on signup" msgstr "Krevt at brukeren angi e-post ved registrering" -#: common/models.py:1241 +#: common/models.py:1255 msgid "Auto-fill SSO users" msgstr "Auto-utfyll SSO brukere" -#: common/models.py:1242 +#: common/models.py:1256 msgid "Automatically fill out user-details from SSO account-data" msgstr "Fyll automatisk ut brukeropplysninger fra SSO kontodata" -#: common/models.py:1248 +#: common/models.py:1262 msgid "Mail twice" msgstr "E-post to ganger" -#: common/models.py:1249 +#: common/models.py:1263 msgid "On signup ask users twice for their mail" msgstr "Ved registrering spør brukere to ganger for e-posten" -#: common/models.py:1255 +#: common/models.py:1269 msgid "Password twice" msgstr "Passord to ganger" -#: common/models.py:1256 +#: common/models.py:1270 msgid "On signup ask users twice for their password" msgstr "Ved registrerting, spør brukere to ganger for passord" -#: common/models.py:1262 +#: common/models.py:1276 msgid "Group on signup" msgstr "" -#: common/models.py:1263 +#: common/models.py:1277 msgid "Group to which new users are assigned on registration" msgstr "Gruppe for hvilke nye brukere som er tilknyttet registrering" -#: common/models.py:1269 +#: common/models.py:1283 msgid "Enforce MFA" msgstr "" -#: common/models.py:1270 +#: common/models.py:1284 msgid "Users must use multifactor security." msgstr "Brukere må bruke flerfaktorsikkerhet." -#: common/models.py:1276 +#: common/models.py:1290 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1277 +#: common/models.py:1291 msgid "Check that all plugins are installed on startup - enable in container enviroments" msgstr "" -#: common/models.py:1284 +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "Aktiver URL integrering" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "Aktiver navigasjonsintegrering" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "Aktiver app integrasjon" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "Vis abbonerte deler" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "Vis abbonerte deler på hjemmesiden" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "Vis abbonerte kategorier" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "Vis abbonerte delkatekorier på hjemmesiden" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "Vis nyeste deler" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "Vis nyeste deler på hjemmesiden" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "Antall nylig deler" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "Vis uvaliderte BOMs" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "Vis BOMs som venter validering på hjemmesiden" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "Vis nylige lagerendringer" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "Vis nylig endret lagervarer på hjemmesiden" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "Siste lagertelling" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "Antall nylige lagervarer som skal vises på indeksside" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "Vis lav lager" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "Vis lav lagervarer på hjemmesiden" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "Vis tom lagervarer" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "Aktiv" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "Sjetong" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "Nøkkel for tilgang" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "Hemmelig" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "Delt hemmlighet for HMAC" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "Melding ID" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "Unik Id for denne meldingen" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "Vert" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "Tittel" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "Overskrift for denne meldingen" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "Brødtekst" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "Arbeidet med" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "Var arbeidet med denne meldingen ferdig?" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "Link til ekstern bedriftsinformasjon" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "Bilde" @@ -2867,9 +2867,9 @@ msgstr "Valuta" msgid "Default currency used for this company" msgstr "Standardvaluta brukt for dette firmaet" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "Last ned bilde fra URL" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "Last opp bilde" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "" @@ -3157,7 +3157,7 @@ msgstr "Oprett ny leverandørdel" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "Ny leverandørdel" @@ -3186,7 +3186,7 @@ msgstr "Produsentdeler" msgid "Create new manufacturer part" msgstr "Opprett ny produsentdeler" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "Ny produsentdel" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "Ny salgsorder" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "Tildelt lagervare" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "Leverandører" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "Slett leverandørdeler" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "Tildelt lagervarer" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "Valgmuligheter" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "Ingen handling spesifisert" msgid "No matching action found" msgstr "Ingen samsvarende handling funnet" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "Må oppgi gyldig strekkode_data parameter" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "Ingen treff funnet for strekkodedata" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "Treff funnet for strekkodedata" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "Seriernummer eksisterer allerede" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/pl/LC_MESSAGES/django.po b/InvenTree/locale/pl/LC_MESSAGES/django.po index 7f5420657a..f3ba2ff849 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: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -25,22 +25,22 @@ msgstr "Nie znaleziono punktu końcowego API" msgid "Error details can be found in the admin panel" msgstr "Szczegóły błędu można znaleźć w panelu administracyjnym" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Wprowadź dane" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "Powtórzony numer seryjny: {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "Podano nieprawidłową ilość" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Pusty ciąg numeru seryjnego" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Nieprawidłowy zakres grupy: {g}" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "Nieprawidłowa grupa: {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Nieprawidłowa sekwencja grupy: {g}" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "Nieprawidłowa/Brak grupy {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "Nie znaleziono numerów seryjnych" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Liczba unikalnych numerów seryjnych ({s}) musi odpowiadać ilości ({q})" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "Brak pliku" msgid "Missing external link" msgstr "Brak zewnętrznego odnośnika" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "Wybierz plik do załączenia" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "Wybierz plik do załączenia" msgid "Link" msgstr "Łącze" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "Link do zewnętrznego adresu URL" @@ -234,10 +223,10 @@ msgstr "Komentarz" msgid "File comment" msgstr "Komentarz pliku" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "Błąd zmiany nazwy pliku" msgid "Invalid choice" msgstr "Błędny wybór" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "Nazwa" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "Nazwa" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "Błąd serwera" msgid "An error has been logged by the server." msgstr "Błąd został zapisany w logach serwera." -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "Numer musi być prawidłowy" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "Czeski" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "Niemiecki" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "Grecki" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "Angielski" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "Hiszpański" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "Hiszpański (Meksyk)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "Perski" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "Francuski" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "Hebrajski" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "Węgierski" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "Włoski" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "Japoński" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "Koreański" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "Holenderski" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "Norweski" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "Polski" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "Portugalski" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "Portugalski (Brazylijski)" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "Rosyjski" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "Szwedzki" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "Tajski" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "Turecki" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "Wietnamski" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "Chiński" @@ -688,33 +677,24 @@ msgstr "" msgid "Production" msgstr "Produkcja" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "Nieprawidłowy kod waluty" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "Błędny znak w nazwie elementu" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "IPN musi być zgodny z wyrażeniem regularnym {pat}" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "Wartość przedawnienia nie może być ujemna" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "Przedawnienie nie może przekroczyć 100 %" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "Nieprawidłowa wartość przedawnienia" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "Odwołanie do zamówienia wykonania" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "Zamówienie budowy, do którego budowa jest przypisana" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "Odwołanie do zamówienia sprzedaży" msgid "SalesOrder to which this build is allocated" msgstr "Zamówienie sprzedaży, do którego budowa jest przypisana" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "Lokalizacja źródła" @@ -888,16 +868,16 @@ msgstr "Status budowania" msgid "Build status code" msgstr "Kod statusu budowania" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "Kod partii" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "Kod partii dla wyjścia budowy" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "Data utworzenia" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "Data zakończenia" @@ -919,7 +899,7 @@ msgstr "Data zakończenia" msgid "completed by" msgstr "zrealizowane przez" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "Wydany przez" @@ -930,9 +910,9 @@ msgstr "Użytkownik, który wydał to zamówienie" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "Odpowiedzialny" @@ -943,7 +923,7 @@ msgstr "Użytkownik odpowiedzialny za to zamówienie budowy" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "Link Zewnętrzny" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "Nie znaleziono wybranego elementu magazynowego w BOM" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "Budowa" @@ -1008,13 +988,13 @@ msgstr "Budowa" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "Element magazynowy" msgid "Source stock item" msgstr "Lokalizacja magazynowania przedmiotu" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "Lokalizacja magazynowania przedmiotu" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "Zainstaluj do" msgid "Destination stock item" msgstr "Docelowa lokalizacja magazynowa przedmiotu" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "Numer seryjny" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "Lokalizacja" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "Status" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "Akceptuj niekompletne" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "Element BOM" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Magazyn, z którego mają być pozyskane elementy (pozostaw puste, aby pobrać z dowolnej lokalizacji)" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "Wyklucz lokalizację" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "Wyklucz produkty magazynowe z wybranej lokalizacji" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Towary magazynowe w wielu lokalizacjach mogą być stosowane zamiennie" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "Zastępczy magazyn" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "Partia" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "Utworzony" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "Przydziel zapasy do budowy" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "Cofnij przydział zapasów" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "Nowe zlecenie budowy" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 +#: common/models.py:890 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:891 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 msgid "Barcode Support" msgstr "Obsługa kodu kreskowego" -#: common/models.py:891 +#: common/models.py:898 msgid "Enable barcode scanner support" msgstr "Włącz obsługę skanera kodów" -#: common/models.py:897 +#: common/models.py:904 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:898 +#: common/models.py:905 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:904 +#: common/models.py:911 msgid "IPN Regex" msgstr "Wyrażenie regularne IPN" -#: common/models.py:905 +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "Zezwól na powtarzający się IPN" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "Zezwól na edycję IPN" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "Skopiuj BOM komponentu" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "Szablon" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "Złożenie" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "Komponent" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "Możliwość zakupu" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "Części są domyślnie z możliwością zakupu" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "Możliwość sprzedaży" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "Części są domyślnie z możliwością sprzedaży" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "Możliwość śledzenia" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "Części są domyślnie z możliwością śledzenia" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "Wirtualny" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "Części są domyślnie wirtualne" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "Pokaż cenę w BOM" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "Dołącz informacje cenowe w tabelach BOM" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "Pokaż historię cen" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "Utwórz początkowy stan magazynowy" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "Ceny wewnętrzne" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "Włącz drukowanie etykiet" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "Włącz drukowanie etykiet z interfejsu WWW" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "DPI etykiety" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "Włącz raporty" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "Tryb Debugowania" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "Rozmiar strony" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "Włącz generowanie raportów testów" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" -msgstr "dni" +#: common/models.py:1163 +msgid "Sell Expired Stock" +msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" -msgstr "" +#: common/models.py:1173 +msgid "days" +msgstr "dni" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 +msgid "Enable creation of default shipment with sales orders" +msgstr "" + +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/models.py:1220 +msgid "Required pattern for generating Purchase Order reference field" +msgstr "" + +#: common/models.py:1227 msgid "Enable password forgot" msgstr "Włącz opcję zapomnianego hasła" -#: common/models.py:1214 +#: common/models.py:1228 msgid "Enable password forgot function on the login pages" msgstr "Włącz funkcję zapomnianego hasła na stronach logowania" -#: common/models.py:1220 +#: common/models.py:1234 msgid "Enable registration" msgstr "Włącz rejestrację" -#: common/models.py:1221 +#: common/models.py:1235 msgid "Enable self-registration for users on the login pages" msgstr "Włącz samodzielną rejestrację dla użytkowników na stronach logowania" -#: common/models.py:1227 +#: common/models.py:1241 msgid "Enable SSO" msgstr "Włącz SSO" -#: common/models.py:1228 +#: common/models.py:1242 msgid "Enable SSO on the login pages" msgstr "Włącz SSO na stronach logowania" -#: common/models.py:1234 +#: common/models.py:1248 msgid "Email required" msgstr "Adres e-mail jest wymagany" -#: common/models.py:1235 +#: common/models.py:1249 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1241 +#: common/models.py:1255 msgid "Auto-fill SSO users" msgstr "Autouzupełnianie użytkowników SSO" -#: common/models.py:1242 +#: common/models.py:1256 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatycznie wypełnij dane użytkownika z danych konta SSO" -#: common/models.py:1248 +#: common/models.py:1262 msgid "Mail twice" msgstr "E-mail dwa razy" -#: common/models.py:1249 +#: common/models.py:1263 msgid "On signup ask users twice for their mail" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich adres e-mail" -#: common/models.py:1255 +#: common/models.py:1269 msgid "Password twice" msgstr "Hasło dwukrotnie" -#: common/models.py:1256 +#: common/models.py:1270 msgid "On signup ask users twice for their password" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich hasło" -#: common/models.py:1262 +#: common/models.py:1276 msgid "Group on signup" msgstr "Grupuj przy rejestracji" -#: common/models.py:1263 +#: common/models.py:1277 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1269 +#: common/models.py:1283 msgid "Enforce MFA" msgstr "Wymuś MFA" -#: common/models.py:1270 +#: common/models.py:1284 msgid "Users must use multifactor security." msgstr "Użytkownicy muszą używać zabezpieczeń wieloskładnikowych." -#: common/models.py:1276 +#: common/models.py:1290 msgid "Check plugins on startup" msgstr "Sprawdź wtyczki przy starcie" -#: common/models.py:1277 +#: common/models.py:1291 msgid "Check that all plugins are installed on startup - enable in container enviroments" msgstr "" -#: common/models.py:1284 +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "Włącz integrację URL" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "Włącz wtyczki, aby dodać ścieżki URL" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "Włącz integrację z aplikacją" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "Włącz wtyczki, aby dodać aplikacje" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "Włącz wtyczki, aby uruchamiać zaplanowane zadania" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "Klucz ustawień (musi być unikalny - niewrażliwy na wielkość liter" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "Pokaż obserwowane części" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "Pokaż obserwowane części na stronie głównej" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "Pokaż obserwowane kategorie" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "Pokaż obserwowane kategorie części na stronie głównej" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "Pokaż najnowsze części" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "Pokaż najnowsze części na stronie głównej" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "Pokaż niski stan magazynowy" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "Pokaż elementy o niskim stanie na stronie głównej" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "Pokaż wymagany stan zapasów" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "Szukaj części" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "Ukryj nieaktywne części" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "Pokaż ilość w formularzach" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "Stały pasek nawigacyjny" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "Format daty" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "Preferowany format wyświetlania dat" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Planowanie komponentów" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "Cena" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "Punkt końcowy" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "Aktywny" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "Sekret" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "Współdzielony sekret dla HMAC" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "Id wiadomości" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "Unikalny identyfikator dla tej wiadomości" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "Host, od którego otrzymano tę wiadomość" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "Nagłówek" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "Nagłówek tej wiadomości" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "Zawartość" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "Punkt kontaktowy" msgid "Link to external company information" msgstr "Link do informacji o zewnętrznym przedsiębiorstwie" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "Obraz" @@ -2867,9 +2867,9 @@ msgstr "Waluta" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "Część bazowa" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "Wartość" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "Uwaga" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "koszt podstawowy" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "Opakowanie" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "wielokrotność" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "Pobierz obraz z adresu URL" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "Załaduj obrazek" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "Pobierz obraz" @@ -3157,7 +3157,7 @@ msgstr "Utwórz nowego dostawcę części" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "Nowy dostawca części" @@ -3186,7 +3186,7 @@ msgstr "Części producenta" msgid "Create new manufacturer part" msgstr "Utwórz nową część producenta" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "Nowa część producenta" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "Dostawcy" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "Usuń parametry" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "Dodaj parametr" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "Odebrane" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "Sprawdzone przez" msgid "User who checked this shipment" msgstr "Użytkownik, który sprawdził tę wysyłkę" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "Przesyłka" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "Zamówienie nie może zostać anulowane" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "Wybierz dostawcę części" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "Oczekujące przesyłki" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "Akcje" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "To pole jest wymagane" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "Domyślna lokalizacja" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "Dostępna ilość" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Kategoria komponentu" @@ -4475,56 +4475,48 @@ msgstr "Nieprawidłowy wybór dla części nadrzędnej" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "Część '{p1}' jest używana w BOM dla '{p2}' (rekursywne)" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "Nazwa komponentu" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "Czy szablon" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "Czy ta część stanowi szablon części?" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "Czy ta część jest wariantem innej części?" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "Wariant" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "Opis komponentu" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "Słowa kluczowe" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "Kategoria" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "Wersja" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "Domyślne wygasanie" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "Minimalny stan magazynowy" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "Czy ten komponent może być zbudowany z innych komponentów?" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "Czy ta część może być użyta do budowy innych części?" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "Czy ta część wymaga śledzenia każdego towaru z osobna?" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "Czy ta część jest aktywna?" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "Czy to wirtualna część, taka jak oprogramowanie lub licencja?" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "Tworzenie użytkownika" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "Sprzedaj wiele" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "Nazwa testu" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "Testowy opis" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "Wprowadź opis do tego testu" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "Wymagane" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "Wymaga wartości" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "Wymaga załącznika" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "Część nadrzędna" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "Dane" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "Wartość parametru" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "Wartość domyślna" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "ID komponentu" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "Unikalny wartość ID komponentu" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "Nazwa komponentu" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "IPN komponentu" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "Wartość IPN części" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "Poziom" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "Wybierz część nadrzędną" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "Podczęść" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "Opcjonalne" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "Ten element BOM jest opcjonalny" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "Notatki pozycji BOM" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "Suma kontrolna" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "Dziedziczone" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "Zezwalaj na warianty" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "Część zastępcza" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "Część 1" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "Część 2" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "Wybierz powiązaną część" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "Części (w tym podkategorie)" msgid "Create new part" msgstr "Utwórz nową część" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "Nowy komponent" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "Opcje" @@ -5194,7 +5186,7 @@ msgstr "Zestawienie materiałowe" msgid "Export actions" msgstr "Akcje eksportu" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "Eksportuj BOM" @@ -5214,70 +5206,63 @@ msgstr "Kopiuj BOM" msgid "Validate BOM" msgstr "Weryfikuj BOM" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "Nowa część w BOM" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "Dodaj część do BOM" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "Złożenia" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "Dostawcy Części" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "Producenci części" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "Powiązane części" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "Dodaj powiązaną część" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "Nieaktywny" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "Przypisane do zamówień sprzedaży" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "Minimalny poziom stanu magazynowego" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "Ostatni numer seryjny" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "Szukaj numeru seryjnego" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "Oblicz" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "Nie znaleziono pasujących obrazów" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "Ukryj szczegóły części" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "Całkowity Koszt" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "Brak dostępnych cen dostawców" @@ -5602,7 +5587,7 @@ msgstr "Pokaż cenę sprzedaży" msgid "Calculation parameters" msgstr "Parametry obliczeniowe" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "Koszty dostawcy" @@ -5744,23 +5729,23 @@ msgstr "Nie określono działania" msgid "No matching action found" msgstr "Nie znaleziono pasującej akcji" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "Należy określić parametr barcode_data" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "Nie znaleziono wyników dla danych kodu kreskowego" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "Znaleziono wyniki dla danych kodu kreskowego" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "Czy wtyczka jest aktywna" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "Wtyczka" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "Włącz PO" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "Wynik" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "Właściciel" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "Wybierz właściciela" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "Nadrzędny towar" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "Część podstawowa" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "Wybierz pasującą część dostawcy dla tego towaru" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "Zainstalowane w" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "Ilość w magazynie" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "Data ważności" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "Usuń po wyczerpaniu" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "Ilość musi być liczbą całkowitą" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "Ilość nie może przekraczać dostępnej ilości towaru ({n})" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "Notatki do wpisu" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "Należy podać wartość dla tego testu" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "Nazwa testu" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "Wynik testu" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "Numer seryjny już istnieje" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "Część musi być dostępna do sprzedaży" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "Lokacje nie są ustawione" @@ -7084,11 +7079,6 @@ msgstr "Etap" msgid "Message" msgstr "Wiadomość" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "Szczegóły wtyczki dla %(name)s" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "Informacje o wtyczce" @@ -7809,7 +7799,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "Wymagana ilość" @@ -8014,15 +8004,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "Wyświetl dane wiersza" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "Dane wiersza" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8030,180 +8024,180 @@ msgstr "Dane wiersza" msgid "Close" msgstr "Zamknij" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "Pobierz szablon BOM-u" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "Wybierz format pliku" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "Poziomy" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "Dodaj zamiennik" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "Zobacz BOM" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8333,158 +8327,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "Ilość za" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "Przydzielono" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "Wybierz części" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "Wybierz" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "Brak informacji o użytkowniku" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8663,32 +8657,32 @@ msgstr "Pozostaw ten formularz otwarty" msgid "Enter a valid number" msgstr "Wprowadź poprawny numer" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Istnieją błędy formularza" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "Nie znaleziono wyników" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "Wyszukiwanie" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "Wyczyść wejście" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "Kolumna pliku" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "Nazwa pola" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "Wybór Kolumn" diff --git a/InvenTree/locale/pt/LC_MESSAGES/django.po b/InvenTree/locale/pt/LC_MESSAGES/django.po index 8624fa3678..e07f98572c 100644 --- a/InvenTree/locale/pt/LC_MESSAGES/django.po +++ b/InvenTree/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -25,22 +25,22 @@ msgstr "API endpoint não encontrado" msgid "Error details can be found in the admin panel" msgstr "Detalhes do erro podem ser encontrados no painel de administrador" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Insira uma Data" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "Numero serial duplicado: {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "Quantidade invalida" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Numero serial em branco" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Numero de grupo invalido:{g}" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "Grupo invalido:{g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Sequencia de grupo invalida:{g}" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "Invalido/sem grupo {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "Nenhum numero serial encontrado" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Numero de numeros seriais ({s}) precisa bater com quantidade ({q})" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "Arquivo nao encontrado" msgid "Missing external link" msgstr "Link externo nao encontrado" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "Selecione arquivo para anexar" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "Selecione arquivo para anexar" msgid "Link" msgstr "Link" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "Link para URL externa" @@ -234,10 +223,10 @@ msgstr "Comentario" msgid "File comment" msgstr "Comentario sobre arquivo" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "Erro renomeando o arquivo" msgid "Invalid choice" msgstr "Escolha invalida" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "Nome" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "Nome" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "Erro de servidor" msgid "An error has been logged by the server." msgstr "Log de erro salvo pelo servidor." -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "Preicsa ser um numero valido" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "" @@ -688,33 +677,24 @@ msgstr "" msgid "Production" msgstr "" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "" @@ -888,16 +868,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "" @@ -919,7 +899,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "" @@ -930,9 +910,9 @@ msgstr "" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "" @@ -943,7 +923,7 @@ msgstr "" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "" @@ -1008,13 +988,13 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "" msgid "Source stock item" msgstr "" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "" msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" +#: common/models.py:890 +msgid "Automatic Backup" msgstr "" #: common/models.py:891 -msgid "Enable barcode scanner support" +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:897 -msgid "Barcode Webcam Support" +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 +msgid "Barcode Support" msgstr "" #: common/models.py:898 -msgid "Allow barcode scanning via webcam in browser" +msgid "Enable barcode scanner support" msgstr "" #: common/models.py:904 -msgid "IPN Regex" +msgid "Barcode Webcam Support" msgstr "" #: common/models.py:905 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:911 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" +msgid "Enable registration" msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" +msgid "Email required" msgstr "" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "" @@ -2867,9 +2867,9 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "" @@ -3157,7 +3157,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "Nenhuma ação especificada" msgid "No matching action found" msgstr "Nenhuma ação correspondente encontrada" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/pt_br/LC_MESSAGES/django.po b/InvenTree/locale/pt_br/LC_MESSAGES/django.po index ce8b5bcd90..aecddd3818 100644 --- a/InvenTree/locale/pt_br/LC_MESSAGES/django.po +++ b/InvenTree/locale/pt_br/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-07 02:25+0000\n" +"POT-Creation-Date: 2022-10-16 13:10+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,7 +41,7 @@ msgstr "" #: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 #: stock/serializers.py:922 stock/serializers.py:1054 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -306,8 +306,8 @@ msgstr "" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -426,103 +426,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "" @@ -779,8 +779,8 @@ msgstr "" #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -817,10 +817,10 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -849,7 +849,7 @@ msgid "SalesOrder to which this build is allocated" msgstr "" #: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "" @@ -912,7 +912,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "" @@ -920,7 +920,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "" @@ -933,7 +933,7 @@ msgstr "" #: order/templates/order/order_base.html:185 #: order/templates/order/sales_order_base.html:183 part/models.py:942 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "" @@ -1000,7 +1000,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "" @@ -1015,7 +1015,7 @@ msgstr "" #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1034,8 +1034,8 @@ msgstr "" #: company/templates/company/supplier_part.html:341 order/models.py:911 #: order/models.py:1437 order/serializers.py:1209 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2657 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1046,11 +1046,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1149,7 +1149,7 @@ msgstr "" #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1165,7 +1165,7 @@ msgstr "" #: build/serializers.py:373 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 @@ -1401,7 +1401,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1491,7 +1491,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1511,7 +1511,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1632,7 +1632,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1887,7 +1887,7 @@ msgstr "" msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" @@ -2870,7 +2870,7 @@ msgstr "" #: company/models.py:248 company/models.py:482 stock/models.py:544 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -3043,8 +3043,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3158,7 +3158,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3187,7 +3187,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3243,7 +3243,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3290,13 +3290,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3321,7 +3321,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -4201,8 +4201,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4324,8 +4324,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4414,7 +4414,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4789,7 +4789,7 @@ msgid "BOM quantity for this BOM item" msgstr "" #: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" @@ -4799,8 +4799,8 @@ msgstr "" msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2667 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" @@ -4834,7 +4834,7 @@ msgid "BOM line checksum" msgstr "" #: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" @@ -4845,7 +4845,7 @@ msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" #: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" @@ -5066,12 +5066,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5195,7 +5195,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5215,70 +5215,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5446,7 +5439,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5508,7 +5501,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5603,7 +5596,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5745,23 +5738,23 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5823,7 +5816,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -6015,7 +6008,7 @@ msgstr "" #: report/templates/report/inventree_test_report_base.html:79 #: stock/models.py:594 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6619,7 +6612,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7085,11 +7078,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7161,7 +7149,7 @@ msgstr "" msgid "Report Settings" msgstr "" -#: templates/InvenTree/settings/setting.html:39 +#: templates/InvenTree/settings/setting.html:37 msgid "No value set" msgstr "" @@ -7809,7 +7797,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8014,15 +8002,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8030,180 +8022,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8333,158 +8325,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" diff --git a/InvenTree/locale/ru/LC_MESSAGES/django.po b/InvenTree/locale/ru/LC_MESSAGES/django.po index dcdf5a0117..80ad1d1c6e 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: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -25,22 +25,22 @@ msgstr "Конечная точка API не обнаружена" msgid "Error details can be found in the admin panel" msgstr "Подробности об ошибке можно найти в панели администратора" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Введите дату" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "Повторяющийся серийный номер: {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "недопустимое количество" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Пустая строка серийного номера" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "Некорректный идентификатор группы {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "Недопустимая/несуществующая группа {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "Серийных номеров не найдено" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "Файл не найден" msgid "Missing external link" msgstr "Отсутствует внешняя ссылка" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "Выберите файл для вложения" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "Выберите файл для вложения" msgid "Link" msgstr "Ссылка" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "Ссылка на внешний URL" @@ -234,10 +223,10 @@ msgstr "Комментарий" msgid "File comment" msgstr "Комментарий к файлу" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "Ошибка переименования файла" msgid "Invalid choice" msgstr "Неверный выбор" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "Название" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "Название" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "Должно быть действительным номером" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "Немецкий" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "Греческий" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "Английский" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "Испанский" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "Испанский (Мексика)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "Французский" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "Иврит" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "Венгерский" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "Итальянский" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "Японский" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "Корейский" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "Голландский" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "Норвежский" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "Польский" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "Русский" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "Шведский" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "Тайский" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "Турецкий" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "Вьетнамский" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "Китайский" @@ -688,33 +677,24 @@ msgstr "Получено по заказу на покупку" msgid "Production" msgstr "Продукция" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "Неверный код валюты" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "Неверный символ в названии части" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "IPN должен совпадать с регулярным выражением {pat}" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "Ссылка должна соответствовать шаблону {pattern}" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "Значение перегрузки не должно быть отрицательным" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "Перегрузка не может превысить 100%" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "Ссылка на заказ" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "Отсылка на заказ" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "Расположение источника" @@ -888,16 +868,16 @@ msgstr "Статус сборки" msgid "Build status code" msgstr "Код статуса сборки" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "Код партии" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "Код партии для этого вывода сборки" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "Дата создания" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "Целевая дата для сборки. Сборка будет просрочена после этой даты." #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "Дата завершения" @@ -919,7 +899,7 @@ msgstr "Дата завершения" msgid "completed by" msgstr "выполнено" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "Выдал/ла" @@ -930,9 +910,9 @@ msgstr "Пользователь, выпустивший этот заказ н #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "Ответственный" @@ -943,7 +923,7 @@ msgstr "Пользователь, ответственный за этот за #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "Внешняя ссылка" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "Выбранная единица хранения не найдена в BOM" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "Сборка" @@ -1008,13 +988,13 @@ msgstr "Сборка" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "Предметы на складе" msgid "Source stock item" msgstr "Исходный складской предмет" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "Исходный складской предмет" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "" msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "Введите количество для вывода сборки" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "Серийные номера" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "Введите серийные номера для результатов сборки" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "Расположение" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "Статус" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "BOM Компонент" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "Компонент должен быть в наличии" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Превышено доступное количество ({q})" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "Партия" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "Создано" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "Новый заказ на сборку" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" +#: common/models.py:890 +msgid "Automatic Backup" msgstr "" #: common/models.py:891 -msgid "Enable barcode scanner support" +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:897 -msgid "Barcode Webcam Support" +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 +msgid "Barcode Support" msgstr "" #: common/models.py:898 -msgid "Allow barcode scanning via webcam in browser" +msgid "Enable barcode scanner support" msgstr "" #: common/models.py:904 -msgid "IPN Regex" +msgid "Barcode Webcam Support" msgstr "" #: common/models.py:905 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:911 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "Разрешить повторяющиеся IPN" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "Разрешить редактирование IPN" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "Шаблон" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "По умолчанию детали являются шаблонами" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "Сборка" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "Компонент" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "Можно продавать" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "Отслеживание" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "Показывать цену в формах" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "Показывать цену в BOM" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "Показывать историю цены" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "Показывать связанные детали" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "Режим отладки" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" -msgstr "Необходимо указать EMail" +msgid "Enable registration" +msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" -msgstr "" +msgid "Email required" +msgstr "Необходимо указать EMail" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "Показывать детали, на которые включены уведомления" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "Показывать детали, на которые включены уведомления, на главной странице" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "Показывать категории, на которые включены уведомления" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "Показывать категории, на которые включены уведомления, на главной странице" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "Показывать последние детали" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "Показывать последние детали на главной странице" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "Показывать непроверенные BOMы" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "Показывать BOMы, ожидающие проверки, на главной странице" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "Показывать изменившиеся складские запасы" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "Показывать единицы хранения с недавно изменившимися складскими запасами на главной странице" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "Показывать низкие складские запасы" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "Показывать единицы хранения с низкими складскими запасами на главной странице" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "Показывать закончившиеся детали" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "Показывать закончившиеся на складе единицы хранения на главной странице" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "Показывать требуемые детали" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "Показывать требуемые для сборки единицы хранения на главной странице" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "Показывать просрочку" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "Показывать единицы хранения с истёкшим сроком годности на главной странице" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "Показывать залежалые" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "Показывать залежалые единицы хранения на главной странице" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "Показывать незавершённые сборки" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "Показывать незавершённые сборки на главной странице" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "Показывать просроченные сборки" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "Показывать просроченные сборки на главной странице" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "Цена" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "Контактное лицо" msgid "Link to external company information" msgstr "Ссылка на описание компании" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "Изображение" @@ -2867,9 +2867,9 @@ msgstr "Валюта" msgid "Default currency used for this company" msgstr "Для этой компании используется валюта по умолчанию" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "Базовая деталь" @@ -2928,7 +2928,7 @@ msgstr "Наименование параметра" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "Значение" msgid "Parameter value" msgstr "Значение параметра" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "Заметка" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "Упаковка" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "Скачать изображение по ссылке" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "Телефон" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "Загрузить изображение" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "Скачать изображение" @@ -3157,7 +3157,7 @@ msgstr "Создать новую деталь поставщика" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "Новая деталь поставщика" @@ -3186,7 +3186,7 @@ msgstr "Детали производителей" msgid "Create new manufacturer part" msgstr "Создать новую деталь производителя" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "Новая деталь производителя" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "Новый заказ на продажу" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "Поставщики" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "Удалить деталь поставщика" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "Удалить параметры" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "Добавить параметр" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "Курс продажи валюты" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "Выберите деталь поставщика" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "Действия" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "Место хранения по умолчанию" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "Доступный запас" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Категория детали" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "Наименование детали" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "Шаблон" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "Эта деталь является шаблоном для других деталей?" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "Эта деталь является разновидностью другой детали?" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "Разновидность" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "Описание детали" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "Ключевые слова" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "Ключевые слова для улучшения видимости в результатах поиска" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "Ключевые слова для улучшения видимости msgid "Category" msgstr "Категория" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "Категория" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "Внутренний код детали" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "Версия детали" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "Версия" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "Где обычно хранится эта деталь?" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "Минимальный запас" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "Минимально допустимый складской запас" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "Может ли эта деталь быть создана из других деталей?" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "Может ли эта деталь использоваться для создания других деталей?" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "Является ли каждый экземпляр этой детали уникальным, обладающим серийным номером?" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "Может ли эта деталь быть закуплена у внешних поставщиков?" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "Может ли эта деталь быть продана покупателям?" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "Эта деталь актуальна?" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "Эта деталь виртуальная, как программный продукт или лицензия?" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "Родительская деталь" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "Шаблон параметра" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "Артикул или наименование детали" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "Артикул" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "Наименование детали" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "IPN" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "Значение IPN" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "Выберите родительскую деталь" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "Выбрать деталь для использования в BOM" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "Разрешить разновидности" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "Для отслеживаемых деталей количество должно быть целым числом" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "Часть 1" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "Часть 2" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "Детали (включая подкатегории)" msgid "Create new part" msgstr "Создать новую деталь" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "Новая деталь" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "Настройки" @@ -5194,7 +5186,7 @@ msgstr "Спецификация" msgid "Export actions" msgstr "Экспорт" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "Экспорт BOM" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "Сборки" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "Поставщики" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "Минимальный складской запас" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "Подходящие изображения не найдены" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "Действие не указано" msgid "No matching action found" msgstr "Соответствующее действие не найдено" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "Должен быть предоставлен параметр штрихкода" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "Не найдено совпадений для данных штрих-кода" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "Найдено совпадение по штрих-коду" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "Автор не найден" msgid "No date found" msgstr "Дата не найдена" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "Родительская единица хранения" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "Базовая деталь" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Место хранения" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "Код партии для этой единицы хранения" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "Исходная сборка" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "Удалить при обнулении" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "Удалить эту единицу хранения при обнулении складского запаса" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "Заметки о единице хранения" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "Деталь не является отслеживаемой" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "Серийные номера уже существуют" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "Выбранная деталь отсутствует в спецификации" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "Выбранная компания не является покупателем" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "Скачать шаблон BOM" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "Редактировать элемент BOM" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "Удалить элемент BOM" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "Элементы BOM не найдены" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "Унаследовано от родительского BOM" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Форма содержит ошибки" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "Не найдено" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/sv/LC_MESSAGES/django.po b/InvenTree/locale/sv/LC_MESSAGES/django.po index f33eb06964..3b15d5c344 100644 --- a/InvenTree/locale/sv/LC_MESSAGES/django.po +++ b/InvenTree/locale/sv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -25,22 +25,22 @@ msgstr "API-slutpunkt hittades inte" msgid "Error details can be found in the admin panel" msgstr "Information om felet finns under Error i adminpanelen" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Ange datum" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "Fjärrservern returnerade tomt svar" msgid "Supplied URL is not a valid image file" msgstr "Angiven URL är inte en giltig bildfil" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "Serienummret finns redan: {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "Ogiltigt antal angivet" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Tom serienummersträng" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Ogiltigt gruppområde: {g}" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "Ogiltig grupp: {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Ogiltig gruppsekvens: {g}" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "Ogiltig/ingen grupp {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "Inga serienummer hittades" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Antal unika serienummer ({s}) måste matcha antal ({q})" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "Ta bort HTML-taggar från detta värde" @@ -200,7 +189,7 @@ msgstr "Saknad fil" msgid "Missing external link" msgstr "Extern länk saknas" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "Välj fil att bifoga" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "Välj fil att bifoga" msgid "Link" msgstr "Länk" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "Länk till extern URL" @@ -234,10 +223,10 @@ msgstr "Kommentar" msgid "File comment" msgstr "Fil kommentar" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "Fel vid namnbyte av fil" msgid "Invalid choice" msgstr "Ogiltigt val" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "Namn" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "Namn" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "Serverfel" msgid "An error has been logged by the server." msgstr "Ett fel har loggats av servern." -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "Måste vara ett giltigt nummer" @@ -425,103 +414,103 @@ 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/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "Tjeckiska" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "Tyska" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "Grekiska" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "Engelska" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "Spanska" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "Spanska (Mexikanska)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "Farsi / Persiska" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "Franska" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "Hebreiska" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "Ungerska" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "Italienska" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "Japanska" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "Koreanska" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "Nederländska" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "Norska" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "Polska" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "Portugisiska" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "Portugisiska (brasiliansk)" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "Ryska" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "Svenska" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "Thailändska" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "Turkiska" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "Vietnamesiska" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "Kinesiska" @@ -688,33 +677,24 @@ msgstr "Mottagen mot inköpsorder" msgid "Production" msgstr "Produktion" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "Inte en giltig valutakod" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "Ogiltigt tecken i delnamn" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "IPN måste matcha regex mönster {pat}" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "Referens måste matcha mönster {pattern}" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "Överskott värde får inte vara negativt" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "Överskott får inte överstiga 100%" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "Ogiltigt värde för överskott" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "Byggorderreferens" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "Byggorder till vilken detta bygge är tilldelad" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "Försäljningsorderreferens" msgid "SalesOrder to which this build is allocated" msgstr "Försäljningsorder till vilken detta bygge allokeras" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "Källa Plats" @@ -888,16 +868,16 @@ msgstr "Byggstatus" msgid "Build status code" msgstr "Bygg statuskod" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "Batchkod" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "Batch-kod för denna byggutdata" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "Skapad" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "Måldatum för färdigställande. Byggandet kommer att förfallas efter detta datum." #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "Slutförandedatum" @@ -919,7 +899,7 @@ msgstr "Slutförandedatum" msgid "completed by" msgstr "slutfört av" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "Utfärdad av" @@ -930,9 +910,9 @@ msgstr "Användare som utfärdade denna byggorder" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "Ansvarig" @@ -943,7 +923,7 @@ msgstr "Användare som ansvarar för denna byggorder" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "Extern länk" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "Vald lagervara hittades inte i BOM" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "Bygg" @@ -1008,13 +988,13 @@ msgstr "Bygg" msgid "Build to allocate parts" msgstr "Bygg för att allokera delar" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "Artikel i lager" msgid "Source stock item" msgstr "Källa lagervara" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "Källa lagervara" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "Installera till" msgid "Destination stock item" msgstr "Destination lagervara" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "Bygg utdata" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "Byggutdata matchar inte överordnad version" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "Plats" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "Status" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "Acceptera ofullständig" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "Skapad" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "Ny byggorder" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 +#: common/models.py:890 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:891 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 msgid "Barcode Support" msgstr "Stöd för streckkoder" -#: common/models.py:891 +#: common/models.py:898 msgid "Enable barcode scanner support" msgstr "Aktivera stöd för streckkodsläsare" -#: common/models.py:897 +#: common/models.py:904 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:898 +#: common/models.py:905 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:904 +#: common/models.py:911 msgid "IPN Regex" msgstr "" -#: common/models.py:905 +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "Virtuell" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "Delar är virtuella som standard" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "Visa import i vyer" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "Visa importguiden i vissa delvyer" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "Visa pris i formulär" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "Visa delars pris i vissa formulär" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "Visa prishistorik" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "Visa historisk prissättning för del" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "Visa relaterade delar" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "Visa relaterade delar för en del" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "Skapa ursprungligt lager" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "Skapa ursprungligt lager när delen skapas" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "Interna priser" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "Visningsformat för delnamn" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "Formatera för att visa artikelnamnet" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "Aktivera etikettutskrift" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "Aktivera etikettutskrift från webbgränssnittet" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "Etikettbild DPI" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "Aktivera rapporter" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "Aktivera generering av rapporter" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "Debugläge" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "Sidstorlek" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "Standard sidstorlek för PDF-rapporter" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "Aktivera testrapporter" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" +msgid "Enable registration" msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" +msgid "Email required" msgstr "" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "" @@ -2867,9 +2867,9 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "" @@ -3157,7 +3157,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "Ingen åtgärd specificerad" msgid "No matching action found" msgstr "Ingen matchande åtgärd hittades" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/th/LC_MESSAGES/django.po b/InvenTree/locale/th/LC_MESSAGES/django.po index bcaa2e4963..11d516fa20 100644 --- a/InvenTree/locale/th/LC_MESSAGES/django.po +++ b/InvenTree/locale/th/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:43\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -25,22 +25,22 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "" msgid "Link" msgstr "" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "" @@ -234,10 +223,10 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "" @@ -688,33 +677,24 @@ msgstr "" msgid "Production" msgstr "" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "" @@ -888,16 +868,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "" @@ -919,7 +899,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "" @@ -930,9 +910,9 @@ msgstr "" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "" @@ -943,7 +923,7 @@ msgstr "" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "" @@ -1008,13 +988,13 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "" msgid "Source stock item" msgstr "" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "" msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" +#: common/models.py:890 +msgid "Automatic Backup" msgstr "" #: common/models.py:891 -msgid "Enable barcode scanner support" +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:897 -msgid "Barcode Webcam Support" +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 +msgid "Barcode Support" msgstr "" #: common/models.py:898 -msgid "Allow barcode scanning via webcam in browser" +msgid "Enable barcode scanner support" msgstr "" #: common/models.py:904 -msgid "IPN Regex" +msgid "Barcode Webcam Support" msgstr "" #: common/models.py:905 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:911 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" +msgid "Enable registration" msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" +msgid "Email required" msgstr "" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "" @@ -2867,9 +2867,9 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "" @@ -3157,7 +3157,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/tr/LC_MESSAGES/django.po b/InvenTree/locale/tr/LC_MESSAGES/django.po index 7804361f11..8167453e9f 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: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -25,22 +25,22 @@ msgstr "API uç noktası bulunamadı" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "Tarih giriniz" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "Sağlanan URL geçerli bir resim dosyası değil" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "Tekrarlanan seri no:{sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "Geçersiz veri sağlandı" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Boş seri numarası dizesi" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "Geçersiz grup: {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "Geçersiz grup: {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "Seri numarası bulunamadı" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "Eksik dosya" msgid "Missing external link" msgstr "Bozuk dış bağlantı" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "Eklenecek dosyayı seç" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "Eklenecek dosyayı seç" msgid "Link" msgstr "Bağlantı" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "Harici URL'ye bağlantı" @@ -234,10 +223,10 @@ msgstr "Yorum" msgid "File comment" msgstr "Dosya yorumu" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "Dosya adı değiştirilirken hata" msgid "Invalid choice" msgstr "Geçersiz seçim" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "Adı" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "Adı" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "Geçerli bir numara olmalı" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "Almanca" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "Yunanca" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "İngilizce" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "İspanyolca" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "İspanyolca(Meksika)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "Fransızca" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "İbranice" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "Macarca" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "İtalyanca" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "Japonca" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "Korece" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "Flemenkçe" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "Norveççe" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "Polonyaca" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "Rusça" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "İsveççe" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "Tay dili" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "Türkçe" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "Vietnamca" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "Çince" @@ -688,33 +677,24 @@ msgstr "Satın alma emri karşılığında alındı" msgid "Production" msgstr "Üretim" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "Geçerli bir para birimi kodu değil" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "Parça adında geçersiz karakter" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "IPN regex kalıbıyla eşleşmelidir {pat}" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "Referans {pattern} deseniyle mutlaka eşleşmeli" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "Fazlalık değeri negatif olmamalıdır" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "Fazlalık %100'ü geçmemelidir" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "Yapım İşi Emri Referansı" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "Bu yapım işinin tahsis edildiği yapım işi emri" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "Satış Emri Referansı" msgid "SalesOrder to which this build is allocated" msgstr "Bu yapım işinin tahsis edildiği satış emri" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "Kaynak Konum" @@ -888,16 +868,16 @@ msgstr "Yapım İşi Durumu" msgid "Build status code" msgstr "Yapım işi durum kodu" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "Sıra numarası" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "Yapım işi çıktısı için sıra numarası" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "Oluşturulma tarihi" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "Yapım işinin tamamlanması için hedef tarih. Bu tarihten sonra yapım işi gecikmiş olacak." #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "Tamamlama tarihi" @@ -919,7 +899,7 @@ msgstr "Tamamlama tarihi" msgid "completed by" msgstr "tamamlayan" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "Veren" @@ -930,9 +910,9 @@ msgstr "Bu yapım işi emrini veren kullanıcı" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "Sorumlu" @@ -943,7 +923,7 @@ msgstr "Bu yapım işi emrinden sorumlu kullanıcı" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "Harici Bağlantı" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "Yapım İşi" @@ -1008,13 +988,13 @@ msgstr "Yapım İşi" msgid "Build to allocate parts" msgstr "Yapım işi için tahsis edilen parçalar" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "Stok Kalemi" msgid "Source stock item" msgstr "Kaynak stok kalemi" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "Kaynak stok kalemi" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "Kurulduğu yer" msgid "Destination stock item" msgstr "Hedef stok kalemi" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "Yapım işi çıktısı için miktarını girin" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "Seri Numaraları" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "Yapım işi çıktısı için seri numaraları girin" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "Konum" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "Durum" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "Gerekli stok tamamen tahsis edilemedi" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "Gerekli yapım işi miktarı tamamlanmadı" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "Stok, yapım işi emri için tamamen tahsis edilemedi" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "Toplu" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "Oluşturuldu" @@ -1510,7 +1490,7 @@ msgstr "Alt Yapım İşi Emrileri" msgid "Allocate Stock to Build" msgstr "Yapım İşi için Stok Tahsis Et" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "Stok tahsisini kaldır" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "Yeni Yapım İşi Emri" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 +#: common/models.py:890 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:891 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 msgid "Barcode Support" msgstr "Barkod Desteği" -#: common/models.py:891 +#: common/models.py:898 msgid "Enable barcode scanner support" msgstr "Barkod tarayıcı desteğini etkinleştir" -#: common/models.py:897 +#: common/models.py:904 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:898 +#: common/models.py:905 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:904 +#: common/models.py:911 msgid "IPN Regex" msgstr "DPN Regex" -#: common/models.py:905 +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "Parça DPN eşleştirmesi için Düzenli İfade Kalıbı (Regex)" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "Yinelenen DPN'ye İzin Ver" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "Birden çok parçanın aynı DPN'yi paylaşmasına izin ver" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "DPN Düzenlemeye İzin Ver" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "Parçayı düzenlerken DPN değiştirmeye izin ver" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "Kategori Paremetre Sablonu Kopyala" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "Parça oluştururken kategori parametre şablonlarını kopyala" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "Şablon" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "Parçaları varsayılan olan şablondur" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "Montaj" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "Bileşen" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "Parçalar varsayılan olarak alt bileşen olarak kullanılabilir" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "Satın Alınabilir" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "Parçalar varsayılan olarak satın alınabilir" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "Satılabilir" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "Parçalar varsayılan olarak satılabilir" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "Takip Edilebilir" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "Parçalar varsayılan olarak takip edilebilir" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "Sanal" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "Parçalar varsayılan olarak sanaldır" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "Formlarda Fiyat Göster" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "İlgili parçaları göster" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "Hata Ayıklama Modu" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "Raporları hata ayıklama modunda üret (HTML çıktısı)" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "Sayfa Boyutu" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "PDF raporlar için varsayılan sayfa boyutu" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" -msgstr "günler" +#: common/models.py:1163 +msgid "Sell Expired Stock" +msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" -msgstr "Stok konumu ve ögeler üzerinde sahiplik kontrolünü etkinleştirin" +#: common/models.py:1173 +msgid "days" +msgstr "günler" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" -msgstr "" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" +msgstr "Stok konumu ve ögeler üzerinde sahiplik kontrolünü etkinleştirin" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" +msgid "Enable registration" msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" +msgid "Email required" msgstr "" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "Formlarda Miktarı Göster" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "Fiyat" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "Aktif" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "Resim" @@ -2867,9 +2867,9 @@ msgstr "Para birimi" msgid "Default currency used for this company" msgstr "Bu şirket için varsayılan para birimi" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "Temel Parça" @@ -2928,7 +2928,7 @@ msgstr "Parametre adı" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "Değer" msgid "Parameter value" msgstr "Parametre değeri" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "Not" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "temel maliyet" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "Paketleme" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "çoklu" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "Resmi İndirin" @@ -3157,7 +3157,7 @@ msgstr "Yeni tedarikçi parçası oluştur" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "Yeni Tedarikçi Parçası" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "Yeni Satış Emri" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "Atanan Stok" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "Tedarikçi parçalarını sil" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tahsis miktarı stok miktarını aşamaz" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "Seri numaralı stok kalemi için miktar bir olmalı" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "Tedarikçi Parçası Seçin" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "İşlemler" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "Varsayılan Konum" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" -msgstr "Sonraki kullanılabilir seri numaraları" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" +msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "Sonraki müsait seri numarası" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "En son seri numarası" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "Yinelenen DPN'ye parça ayarlarında izin verilmiyor" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "Parça adı" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "Şablon Mu" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "Bu parça bir şablon parçası mı?" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "Bu parça başka bir parçanın çeşidi mi?" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "Çeşidi" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "Parça açıklaması" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "Anahtar kelimeler" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "DPN" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "Parça revizyon veya versiyon numarası" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "Revizyon" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "Varsayılan Tedarikçi" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "Varsayılan tedarikçi parçası" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "Minimum Stok" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "Bu parça diğer parçalardan yapılabilir mi?" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "Bu parça diğer parçaların yapımında kullanılabilir mi?" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "Bu parça dış tedarikçilerden satın alınabilir mi?" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "Bu parça müşterilere satılabilir mi?" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "Bu parça aktif mi?" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "Oluşturan Kullanıcı" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "Test şablonları sadece takip edilebilir paçalar için oluşturulabilir" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "Test Adı" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "Test Açıklaması" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "Gerekli" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "Testi geçmesi için bu gerekli mi?" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "Parametre şablon adı benzersiz olmalıdır" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "Parametre Şablonu" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Bu malzeme listesi, çeşit parçalar listesini kalıtsalıdır" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "Çeşide İzin Ver" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Çeşit parçaların stok kalemleri bu malzeme listesinde kullanılabilir" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "Parçalar (Alt kategoriler dahil)" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "Parça Tedarikçileri" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "Pasif" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "Son Seri Numarası" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "Hesapla" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "Toplam Maliyet" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "İşlem belirtilmedi" msgid "No matching action found" msgstr "Eşleşen eylem bulunamadı" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "Barcode_data parametresini sağlamalıdır" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "Barkod verisi için eşleşme bulunamadı" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "Barkod verisi için eşleşme bulundu" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "Bu seri numarasına sahip stok kalemi zaten var" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "Seri numarası olan ögenin miktarı bir olmalı" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Miktar birden büyük ise seri numarası ayarlanamaz" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "Üst Stok Kalemi" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "Bu stok kalemi için tedarikçi parçası seçin" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Stok Konumu" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "Bu öge için seri numarası" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "Seri numaraları tam sayı listesi olmalı" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "Miktar seri numaları ile eşleşmiyor" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "Seri numaraları zaten mevcut: {exists}" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stok kalemi stokta olmadığı için taşınamaz" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "Seri numaraları zaten mevcut" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "İşlem notu ekle (isteğe bağlı)" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "Konum ayarlanmadı" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "Konuma Kaydet" msgid "Barcode does not match a valid location" msgstr "Barkod geçerli bir konumla eşleşmiyor" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "Kapat" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "Seviyeler" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "Dışa aktarılan malzeme listesine parça tedarikçisi verilerini dahil edin" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "Gerekli Parça" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "Stok tahsisini düzenle" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "Stok tahsisini sil" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "Parçaları Seçin" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/vi/LC_MESSAGES/django.po b/InvenTree/locale/vi/LC_MESSAGES/django.po index 82964e36e1..84c60c4f8e 100644 --- a/InvenTree/locale/vi/LC_MESSAGES/django.po +++ b/InvenTree/locale/vi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -25,22 +25,22 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "" msgid "Link" msgstr "" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "" @@ -234,10 +223,10 @@ msgstr "Bình luận" msgid "File comment" msgstr "" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "" @@ -688,33 +677,24 @@ msgstr "" msgid "Production" msgstr "" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "" @@ -888,16 +868,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "Ngày hoàn thành" @@ -919,7 +899,7 @@ msgstr "Ngày hoàn thành" msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "" @@ -930,9 +910,9 @@ msgstr "" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "" @@ -943,7 +923,7 @@ msgstr "" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "" @@ -1008,13 +988,13 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "" msgid "Source stock item" msgstr "" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "" msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "" msgid "Location" msgstr "" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "Trạng thái" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "" @@ -1510,7 +1490,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" +#: common/models.py:890 +msgid "Automatic Backup" msgstr "" #: common/models.py:891 -msgid "Enable barcode scanner support" +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:897 -msgid "Barcode Webcam Support" +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 +msgid "Barcode Support" msgstr "" #: common/models.py:898 -msgid "Allow barcode scanning via webcam in browser" +msgid "Enable barcode scanner support" msgstr "" #: common/models.py:904 -msgid "IPN Regex" +msgid "Barcode Webcam Support" msgstr "" #: common/models.py:905 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:911 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1137 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1142 -msgid "Stock Expiry" -msgstr "" - #: common/models.py:1143 -msgid "Enable stock expiry functionality" +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1149 -msgid "Sell Expired Stock" +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" msgstr "" #: common/models.py:1150 -msgid "Allow sale of expired stock" +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1151 +msgid "Template for generating default batch codes for stock items" msgstr "" #: common/models.py:1156 -msgid "Stock Stale Time" +msgid "Stock Expiry" msgstr "" #: common/models.py:1157 -msgid "Number of days stock items are considered stale before expiring" +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1159 -msgid "days" +#: common/models.py:1163 +msgid "Sell Expired Stock" msgstr "" #: common/models.py:1164 -msgid "Build Expired Stock" +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1165 -msgid "Allow building with expired stock" +#: common/models.py:1170 +msgid "Stock Stale Time" msgstr "" #: common/models.py:1171 -msgid "Stock Ownership Control" +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1172 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1173 +msgid "days" msgstr "" #: common/models.py:1178 -msgid "Stock Location Default Icon" +msgid "Build Expired Stock" msgstr "" #: common/models.py:1179 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1184 -msgid "Build Order Reference Pattern" +msgid "Allow building with expired stock" msgstr "" #: common/models.py:1185 -msgid "Required pattern for generating Build Order reference field" +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1191 -msgid "Sales Order Reference Pattern" +#: common/models.py:1186 +msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:1192 -msgid "Required pattern for generating Sales Order reference field" +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1193 +msgid "Stock location default icon (empty means no icon)" msgstr "" #: common/models.py:1198 -msgid "Sales Order Default Shipment" +msgid "Build Order Reference Pattern" msgstr "" #: common/models.py:1199 -msgid "Enable creation of default shipment with sales orders" +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1205 -msgid "Purchase Order Reference Pattern" +msgid "Sales Order Reference Pattern" msgstr "" #: common/models.py:1206 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1212 +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1213 -msgid "Enable password forgot" +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1214 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1219 +msgid "Purchase Order Reference Pattern" msgstr "" #: common/models.py:1220 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1221 -msgid "Enable self-registration for users on the login pages" +msgid "Required pattern for generating Purchase Order reference field" msgstr "" #: common/models.py:1227 -msgid "Enable SSO" +msgid "Enable password forgot" msgstr "" #: common/models.py:1228 -msgid "Enable SSO on the login pages" +msgid "Enable password forgot function on the login pages" msgstr "" #: common/models.py:1234 -msgid "Email required" +msgid "Enable registration" msgstr "" #: common/models.py:1235 -msgid "Require user to supply mail on signup" +msgid "Enable self-registration for users on the login pages" msgstr "" #: common/models.py:1241 -msgid "Auto-fill SSO users" +msgid "Enable SSO" msgstr "" #: common/models.py:1242 -msgid "Automatically fill out user-details from SSO account-data" +msgid "Enable SSO on the login pages" msgstr "" #: common/models.py:1248 -msgid "Mail twice" +msgid "Email required" msgstr "" #: common/models.py:1249 -msgid "On signup ask users twice for their mail" +msgid "Require user to supply mail on signup" msgstr "" #: common/models.py:1255 -msgid "Password twice" +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:1256 -msgid "On signup ask users twice for their password" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" #: common/models.py:1262 -msgid "Group on signup" +msgid "Mail twice" msgstr "" #: common/models.py:1263 -msgid "Group to which new users are assigned on registration" +msgid "On signup ask users twice for their mail" msgstr "" #: common/models.py:1269 -msgid "Enforce MFA" +msgid "Password twice" msgstr "" #: common/models.py:1270 -msgid "Users must use multifactor security." +msgid "On signup ask users twice for their password" msgstr "" #: common/models.py:1276 -msgid "Check plugins on startup" +msgid "Group on signup" msgstr "" #: common/models.py:1277 -msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1283 +msgid "Enforce MFA" msgstr "" #: common/models.py:1284 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1290 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1291 +msgid "Check that all plugins are installed on startup - enable in container enviroments" +msgstr "" + +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "Hiển thị nguyên liệu mới nhất" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "Hiển thị nguyên liệu mới nhất trên trang chủ" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "" @@ -2867,9 +2867,9 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "" @@ -3157,7 +3157,7 @@ msgstr "" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "" msgid "Category" msgstr "" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "" msgid "Create new part" msgstr "" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "Số seri mới nhất" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Kho hàng" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/locale/zh/LC_MESSAGES/django.po b/InvenTree/locale/zh/LC_MESSAGES/django.po index 6ba5935f14..ec46f20ee0 100644 --- a/InvenTree/locale/zh/LC_MESSAGES/django.po +++ b/InvenTree/locale/zh/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-08 12:47+0000\n" -"PO-Revision-Date: 2022-10-08 13:13\n" +"POT-Creation-Date: 2022-10-18 12:51+0000\n" +"PO-Revision-Date: 2022-10-18 14:44\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -25,22 +25,22 @@ msgstr "未找到 API 端点" msgid "Error details can be found in the admin panel" msgstr "在管理面板中可以找到错误详细信息" -#: InvenTree/fields.py:109 +#: InvenTree/fields.py:108 msgid "Enter date" msgstr "输入日期" -#: InvenTree/fields.py:183 build/serializers.py:384 +#: InvenTree/fields.py:182 build/serializers.py:387 #: build/templates/build/sidebar.html:21 company/models.py:524 #: company/templates/company/sidebar.html:25 order/models.py:920 #: order/templates/order/po_sidebar.html:11 #: order/templates/order/so_sidebar.html:17 #: part/templates/part/part_sidebar.html:59 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/models.py:1946 stock/models.py:2054 stock/serializers.py:327 -#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823 -#: stock/serializers.py:922 stock/serializers.py:1054 +#: stock/models.py:2002 stock/models.py:2110 stock/serializers.py:327 +#: stock/serializers.py:460 stock/serializers.py:541 stock/serializers.py:827 +#: stock/serializers.py:926 stock/serializers.py:1058 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1121 +#: templates/js/translated/barcode.js:102 templates/js/translated/bom.js:1146 #: templates/js/translated/company.js:1022 #: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555 #: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004 @@ -122,49 +122,38 @@ msgstr "" msgid "Supplied URL is not a valid image file" msgstr "提供的 URL 不是一个有效的图片文件" -#: InvenTree/helpers.py:583 -#, python-brace-format -msgid "Duplicate serial: {sn}" -msgstr "重复的序列号: {sn}" - -#: InvenTree/helpers.py:590 order/models.py:325 order/models.py:477 +#: InvenTree/helpers.py:602 order/models.py:325 order/models.py:477 msgid "Invalid quantity provided" msgstr "提供的数量无效" -#: InvenTree/helpers.py:593 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "空序列号字符串" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:633 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:662 #, python-brace-format msgid "Invalid group range: {g}" msgstr "无效的组范围: {g}" -#: InvenTree/helpers.py:628 -#, python-brace-format -msgid "Invalid group: {g}" -msgstr "无效的群组: {g}" - -#: InvenTree/helpers.py:656 +#: InvenTree/helpers.py:714 InvenTree/helpers.py:721 InvenTree/helpers.py:736 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "无效的组序列: {g}" -#: InvenTree/helpers.py:664 -#, python-brace-format -msgid "Invalid/no group {group}" -msgstr "无效的群组: {group}" - -#: InvenTree/helpers.py:670 +#: InvenTree/helpers.py:746 msgid "No serial numbers found" msgstr "未找到序列号" -#: InvenTree/helpers.py:674 +#: InvenTree/helpers.py:749 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "唯一序列号 ({s}) 必须匹配数量 ({q})" -#: InvenTree/helpers.py:873 +#: InvenTree/helpers.py:948 msgid "Remove HTML tags from this value" msgstr "" @@ -200,7 +189,7 @@ msgstr "缺少文件" msgid "Missing external link" msgstr "缺少外部链接" -#: InvenTree/models.py:405 stock/models.py:2048 +#: InvenTree/models.py:405 stock/models.py:2104 #: templates/js/translated/attachment.js:103 #: templates/js/translated/attachment.js:241 msgid "Attachment" @@ -212,7 +201,7 @@ msgstr "选择附件" #: InvenTree/models.py:412 company/models.py:124 company/models.py:276 #: company/models.py:511 order/models.py:84 order/models.py:1259 -#: part/models.py:802 part/templates/part/part_scheduling.html:11 +#: part/models.py:816 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 #: templates/js/translated/company.js:691 #: templates/js/translated/company.js:1011 @@ -220,8 +209,8 @@ msgstr "选择附件" msgid "Link" msgstr "链接" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:803 -#: stock/models.py:604 +#: InvenTree/models.py:413 build/models.py:290 part/models.py:817 +#: stock/models.py:660 msgid "Link to external URL" msgstr "链接到外部 URL" @@ -234,10 +223,10 @@ msgstr "注释" msgid "File comment" msgstr "文件注释" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679 -#: common/models.py:1680 common/models.py:1903 common/models.py:1904 -#: common/models.py:2166 common/models.py:2167 part/models.py:2240 -#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261 +#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1693 +#: common/models.py:1694 common/models.py:1917 common/models.py:1918 +#: common/models.py:2180 common/models.py:2181 part/models.py:2254 +#: part/models.py:2274 plugin/models.py:260 plugin/models.py:261 #: report/templates/report/inventree_test_report_base.html:96 #: templates/js/translated/stock.js:2649 msgid "User" @@ -276,9 +265,9 @@ msgstr "重命名文件出错" msgid "Invalid choice" msgstr "选择无效" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889 -#: company/models.py:358 label/models.py:101 part/models.py:746 -#: part/models.py:2418 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1903 +#: company/models.py:358 label/models.py:101 part/models.py:760 +#: part/models.py:2432 plugin/models.py:94 report/models.py:152 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin.html:134 @@ -297,7 +286,7 @@ msgstr "名称" #: company/models.py:517 company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 #: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:82 part/models.py:769 part/models.py:2430 +#: order/models.py:82 part/models.py:783 part/models.py:2444 #: part/templates/part/category.html:80 part/templates/part/part_base.html:172 #: part/templates/part/part_scheduling.html:12 report/models.py:165 #: report/models.py:507 report/models.py:551 @@ -305,8 +294,8 @@ msgstr "名称" #: stock/templates/stock/location.html:113 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/InvenTree/settings/settings.html:358 -#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862 -#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444 +#: templates/js/translated/bom.js:579 templates/js/translated/bom.js:887 +#: templates/js/translated/build.js:2544 templates/js/translated/company.js:444 #: templates/js/translated/company.js:702 #: templates/js/translated/company.js:986 templates/js/translated/order.js:1988 #: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831 @@ -358,7 +347,7 @@ msgstr "服务器错误" msgid "An error has been logged by the server." msgstr "服务器记录了一个错误。" -#: InvenTree/serializers.py:55 part/models.py:2766 +#: InvenTree/serializers.py:55 part/models.py:2780 msgid "Must be a valid number" msgstr "必须是有效数字" @@ -425,103 +414,103 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:613 +#: InvenTree/settings.py:621 msgid "Czech" msgstr "捷克语" -#: InvenTree/settings.py:614 +#: InvenTree/settings.py:622 msgid "Danish" msgstr "" -#: InvenTree/settings.py:615 +#: InvenTree/settings.py:623 msgid "German" msgstr "德语" -#: InvenTree/settings.py:616 +#: InvenTree/settings.py:624 msgid "Greek" msgstr "希腊语" -#: InvenTree/settings.py:617 +#: InvenTree/settings.py:625 msgid "English" msgstr "英语" -#: InvenTree/settings.py:618 +#: InvenTree/settings.py:626 msgid "Spanish" msgstr "西班牙语" -#: InvenTree/settings.py:619 +#: InvenTree/settings.py:627 msgid "Spanish (Mexican)" msgstr "西班牙语(墨西哥)" -#: InvenTree/settings.py:620 +#: InvenTree/settings.py:628 msgid "Farsi / Persian" msgstr "波斯语" -#: InvenTree/settings.py:621 +#: InvenTree/settings.py:629 msgid "French" msgstr "法语" -#: InvenTree/settings.py:622 +#: InvenTree/settings.py:630 msgid "Hebrew" msgstr "希伯来语" -#: InvenTree/settings.py:623 +#: InvenTree/settings.py:631 msgid "Hungarian" msgstr "匈牙利语" -#: InvenTree/settings.py:624 +#: InvenTree/settings.py:632 msgid "Italian" msgstr "意大利语" -#: InvenTree/settings.py:625 +#: InvenTree/settings.py:633 msgid "Japanese" msgstr "日语" -#: InvenTree/settings.py:626 +#: InvenTree/settings.py:634 msgid "Korean" msgstr "韩语" -#: InvenTree/settings.py:627 +#: InvenTree/settings.py:635 msgid "Dutch" msgstr "荷兰语" -#: InvenTree/settings.py:628 +#: InvenTree/settings.py:636 msgid "Norwegian" msgstr "挪威语" -#: InvenTree/settings.py:629 +#: InvenTree/settings.py:637 msgid "Polish" msgstr "波兰语" -#: InvenTree/settings.py:630 +#: InvenTree/settings.py:638 msgid "Portuguese" msgstr "葡萄牙语" -#: InvenTree/settings.py:631 +#: InvenTree/settings.py:639 msgid "Portuguese (Brazilian)" msgstr "葡萄牙语 (巴西)" -#: InvenTree/settings.py:632 +#: InvenTree/settings.py:640 msgid "Russian" msgstr "俄语" -#: InvenTree/settings.py:633 +#: InvenTree/settings.py:641 msgid "Swedish" msgstr "瑞典语" -#: InvenTree/settings.py:634 +#: InvenTree/settings.py:642 msgid "Thai" msgstr "泰语" -#: InvenTree/settings.py:635 +#: InvenTree/settings.py:643 msgid "Turkish" msgstr "土耳其语" -#: InvenTree/settings.py:636 +#: InvenTree/settings.py:644 msgid "Vietnamese" msgstr "越南语" -#: InvenTree/settings.py:637 +#: InvenTree/settings.py:645 msgid "Chinese" msgstr "中文(简体)" @@ -688,33 +677,24 @@ msgstr "收到定购单" msgid "Production" msgstr "生产中" -#: InvenTree/validators.py:18 +#: InvenTree/validators.py:19 msgid "Not a valid currency code" msgstr "不是有效的货币代码" -#: InvenTree/validators.py:45 -msgid "Invalid character in part name" -msgstr "商品名称中存在无效字符" - -#: InvenTree/validators.py:57 +#: InvenTree/validators.py:90 #, python-brace-format msgid "IPN must match regex pattern {pat}" msgstr "IPN 必须匹配正则表达式 {pat}" -#: InvenTree/validators.py:68 InvenTree/validators.py:79 -#, python-brace-format -msgid "Reference must match pattern {pattern}" -msgstr "引用必须匹配模板 {pattern}" - -#: InvenTree/validators.py:102 InvenTree/validators.py:118 +#: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" msgstr "备损值不能为负数" -#: InvenTree/validators.py:120 +#: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" msgstr "备损不能超过 100%" -#: InvenTree/validators.py:127 +#: InvenTree/validators.py:157 msgid "Invalid value for overage" msgstr "无效的备损值" @@ -774,12 +754,12 @@ msgid "Build Order Reference" msgstr "相关生产订单" #: build/models.py:155 order/models.py:240 order/models.py:632 -#: order/models.py:918 part/models.py:2676 +#: order/models.py:918 part/models.py:2690 #: part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872 -#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251 +#: templates/js/translated/bom.js:716 templates/js/translated/bom.js:897 +#: templates/js/translated/build.js:1831 templates/js/translated/order.js:2251 #: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823 #: templates/js/translated/order.js:4331 msgid "Reference" @@ -801,25 +781,25 @@ msgstr "此次生产匹配的订单" #: build/models.py:180 build/templates/build/build_base.html:80 #: build/templates/build/detail.html:29 company/models.py:679 #: order/models.py:1015 order/models.py:1126 order/models.py:1127 -#: part/models.py:343 part/models.py:2186 part/models.py:2201 -#: part/models.py:2220 part/models.py:2238 part/models.py:2337 -#: part/models.py:2464 part/models.py:2556 part/models.py:2641 -#: part/models.py:2935 part/serializers.py:828 +#: part/models.py:343 part/models.py:2200 part/models.py:2215 +#: part/models.py:2234 part/models.py:2252 part/models.py:2351 +#: part/models.py:2478 part/models.py:2570 part/models.py:2655 +#: part/models.py:2949 part/serializers.py:828 #: 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_build_order_base.html:109 #: report/templates/report/inventree_po_report.html:89 #: report/templates/report/inventree_so_report.html:90 stock/serializers.py:86 -#: stock/serializers.py:490 templates/InvenTree/search.html:82 +#: stock/serializers.py:494 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:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:553 -#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816 -#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698 -#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547 +#: templates/js/translated/barcode.js:454 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:715 templates/js/translated/bom.js:841 +#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1700 +#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2549 #: templates/js/translated/company.js:301 #: templates/js/translated/company.js:531 #: templates/js/translated/company.js:643 @@ -847,8 +827,8 @@ msgstr "相关销售订单" msgid "SalesOrder to which this build is allocated" msgstr "此次生产匹配的销售订单" -#: build/models.py:202 build/serializers.py:819 -#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173 +#: build/models.py:202 build/serializers.py:822 +#: templates/js/translated/build.js:2146 templates/js/translated/order.js:3173 msgid "Source Location" msgstr "来源地点" @@ -888,16 +868,16 @@ msgstr "生产状态" msgid "Build status code" msgstr "生产状态代码" -#: build/models.py:245 build/serializers.py:225 order/serializers.py:464 -#: stock/models.py:608 templates/js/translated/order.js:1496 +#: build/models.py:245 build/serializers.py:224 order/serializers.py:464 +#: stock/models.py:664 templates/js/translated/order.js:1496 msgid "Batch Code" msgstr "批量代码" -#: build/models.py:249 build/serializers.py:226 +#: build/models.py:249 build/serializers.py:225 msgid "Batch code for this build output" msgstr "此生产产出的批量代码" -#: build/models.py:252 order/models.py:86 part/models.py:938 +#: build/models.py:252 order/models.py:86 part/models.py:952 #: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844 msgid "Creation Date" msgstr "创建日期" @@ -911,7 +891,7 @@ msgid "Target date for build completion. Build will be overdue after this date." msgstr "生产完成的目标日期。生产将在此日期之后逾期。" #: build/models.py:260 order/models.py:291 -#: templates/js/translated/build.js:2624 +#: templates/js/translated/build.js:2626 msgid "Completion Date" msgstr "完成日期:" @@ -919,7 +899,7 @@ msgstr "完成日期:" msgid "completed by" msgstr "完成人" -#: build/models.py:274 templates/js/translated/build.js:2592 +#: build/models.py:274 templates/js/translated/build.js:2594 msgid "Issued by" msgstr "发布者" @@ -930,9 +910,9 @@ msgstr "发布此生产订单的用户" #: build/models.py:283 build/templates/build/build_base.html:193 #: build/templates/build/detail.html:115 order/models.py:100 #: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:942 +#: order/templates/order/sales_order_base.html:183 part/models.py:956 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022 +#: templates/js/translated/build.js:2606 templates/js/translated/order.js:2022 msgid "Responsible" msgstr "责任人" @@ -943,7 +923,7 @@ msgstr "负责此生产订单的用户" #: build/models.py:289 build/templates/build/detail.html:101 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:359 stock/models.py:602 +#: part/templates/part/part_base.html:361 stock/models.py:658 #: stock/templates/stock/item_base.html:203 msgid "External Link" msgstr "外部链接" @@ -999,7 +979,7 @@ msgid "Selected stock item not found in BOM" msgstr "在BOM中找不到选定的库存项" #: build/models.py:1329 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2528 #: templates/navbar.html:38 msgid "Build" msgstr "生产" @@ -1008,13 +988,13 @@ msgstr "生产" msgid "Build to allocate parts" msgstr "生产以分配部件" -#: build/models.py:1346 build/serializers.py:660 order/serializers.py:1035 -#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754 -#: stock/serializers.py:880 stock/templates/stock/item_base.html:10 +#: build/models.py:1346 build/serializers.py:663 order/serializers.py:1039 +#: order/serializers.py:1060 stock/serializers.py:398 stock/serializers.py:758 +#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:197 #: templates/js/translated/build.js:790 templates/js/translated/build.js:795 -#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2711 #: templates/js/translated/order.js:107 templates/js/translated/order.js:3186 #: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493 #: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680 @@ -1027,14 +1007,14 @@ msgstr "库存项" msgid "Source stock item" msgstr "源库存项" -#: build/models.py:1359 build/serializers.py:193 +#: build/models.py:1359 build/serializers.py:192 #: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1711 +#: build/templates/build/detail.html:34 common/models.py:1725 #: company/templates/company/supplier_part.html:341 order/models.py:911 -#: order/models.py:1437 order/serializers.py:1209 +#: order/models.py:1437 order/serializers.py:1213 #: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40 -#: part/models.py:2657 part/templates/part/detail.html:956 -#: part/templates/part/detail.html:1042 +#: part/models.py:2671 part/templates/part/detail.html:938 +#: part/templates/part/detail.html:1024 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_build_order_base.html:113 @@ -1045,11 +1025,11 @@ msgstr "源库存项" #: stock/serializers.py:291 stock/templates/stock/item_base.html:290 #: stock/templates/stock/item_base.html:298 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:692 -#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474 +#: templates/js/translated/barcode.js:456 templates/js/translated/bom.js:717 +#: templates/js/translated/bom.js:905 templates/js/translated/build.js:474 #: templates/js/translated/build.js:626 templates/js/translated/build.js:817 -#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724 -#: templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1726 +#: templates/js/translated/build.js:2161 #: templates/js/translated/model_renderers.js:120 #: templates/js/translated/order.js:123 templates/js/translated/order.js:1137 #: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490 @@ -1076,79 +1056,79 @@ msgstr "安装到" msgid "Destination stock item" msgstr "目标库存项" -#: build/serializers.py:138 build/serializers.py:689 +#: build/serializers.py:137 build/serializers.py:692 #: templates/js/translated/build.js:1215 msgid "Build Output" msgstr "生产产出" -#: build/serializers.py:150 +#: build/serializers.py:149 msgid "Build output does not match the parent build" msgstr "生产产出与对应生产不匹配" -#: build/serializers.py:154 +#: build/serializers.py:153 msgid "Output part does not match BuildOrder part" msgstr "产出部件与生产订单部件不匹配" -#: build/serializers.py:158 +#: build/serializers.py:157 msgid "This build output has already been completed" msgstr "此生产产出已经完成" -#: build/serializers.py:169 +#: build/serializers.py:168 msgid "This build output is not fully allocated" msgstr "生产产出未被完成分配" -#: build/serializers.py:194 +#: build/serializers.py:193 msgid "Enter quantity for build output" msgstr "输入生产产出数量" -#: build/serializers.py:208 build/serializers.py:680 order/models.py:323 +#: build/serializers.py:207 build/serializers.py:683 order/models.py:323 #: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558 -#: part/serializers.py:991 stock/models.py:462 stock/models.py:1197 +#: part/serializers.py:991 stock/models.py:518 stock/models.py:1253 #: stock/serializers.py:300 msgid "Quantity must be greater than zero" msgstr "数量必须大于0" -#: build/serializers.py:215 +#: build/serializers.py:214 msgid "Integer quantity required for trackable parts" msgstr "对于可追踪的部件,需要整数型数值" -#: build/serializers.py:218 +#: build/serializers.py:217 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "需要整数型数值,因为BOM包含可追踪的部件" -#: build/serializers.py:232 order/serializers.py:472 order/serializers.py:1213 +#: build/serializers.py:231 order/serializers.py:472 order/serializers.py:1217 #: stock/serializers.py:309 templates/js/translated/order.js:1507 #: templates/js/translated/stock.js:271 templates/js/translated/stock.js:459 msgid "Serial Numbers" msgstr "序列号" -#: build/serializers.py:233 +#: build/serializers.py:232 msgid "Enter serial numbers for build outputs" msgstr "输入生产产出的序列号" -#: build/serializers.py:246 +#: build/serializers.py:245 msgid "Auto Allocate Serial Numbers" msgstr "自动分配序列号" -#: build/serializers.py:247 +#: build/serializers.py:246 msgid "Automatically allocate required items with matching serial numbers" msgstr "自动为所需项分配对应的序列号" -#: build/serializers.py:278 stock/api.py:577 -msgid "The following serial numbers already exist" -msgstr "以下的序列号已存在" +#: build/serializers.py:281 stock/api.py:589 +msgid "The following serial numbers already exist or are invalid" +msgstr "" -#: build/serializers.py:327 build/serializers.py:396 +#: build/serializers.py:330 build/serializers.py:399 msgid "A list of build outputs must be provided" msgstr "必须提供生产产出列表" -#: build/serializers.py:366 order/serializers.py:445 order/serializers.py:552 -#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532 -#: stock/serializers.py:915 stock/serializers.py:1148 +#: build/serializers.py:369 order/serializers.py:445 order/serializers.py:556 +#: stock/serializers.py:320 stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:919 stock/serializers.py:1152 #: stock/templates/stock/item_base.html:388 #: templates/js/translated/barcode.js:455 #: templates/js/translated/barcode.js:644 templates/js/translated/build.js:802 -#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534 +#: templates/js/translated/build.js:1738 templates/js/translated/order.js:1534 #: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605 #: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694 #: templates/js/translated/part.js:181 templates/js/translated/stock.js:588 @@ -1157,159 +1137,159 @@ msgstr "必须提供生产产出列表" msgid "Location" msgstr "地点" -#: build/serializers.py:367 +#: build/serializers.py:370 msgid "Location for completed build outputs" msgstr "已完成生产产出的仓储地点" -#: build/serializers.py:373 build/templates/build/build_base.html:145 +#: build/serializers.py:376 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:62 order/models.py:651 #: order/serializers.py:482 stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2576 +#: templates/js/translated/barcode.js:205 templates/js/translated/build.js:2578 #: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992 #: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1831 #: templates/js/translated/stock.js:2603 templates/js/translated/stock.js:2735 msgid "Status" msgstr "状态" -#: build/serializers.py:379 +#: build/serializers.py:382 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:380 +#: build/serializers.py:383 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果库存尚未完成分配,完成产出" -#: build/serializers.py:449 +#: build/serializers.py:452 msgid "Remove Allocated Stock" msgstr "移除已分配的库存" -#: build/serializers.py:450 +#: build/serializers.py:453 msgid "Subtract any stock which has already been allocated to this build" msgstr "减去已经分配至此生产的库存" -#: build/serializers.py:456 +#: build/serializers.py:459 msgid "Remove Incomplete Outputs" msgstr "移除未完成的产出" -#: build/serializers.py:457 +#: build/serializers.py:460 msgid "Delete any build outputs which have not been completed" msgstr "删除所有未完成的生产产出" -#: build/serializers.py:485 +#: build/serializers.py:488 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:489 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:509 +#: build/serializers.py:512 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:514 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:521 +#: build/serializers.py:524 msgid "Some stock items have been overallocated" msgstr "一些库存项已被过度分配" -#: build/serializers.py:526 +#: build/serializers.py:529 msgid "Accept Unallocated" msgstr "接受未分配的" -#: build/serializers.py:527 +#: build/serializers.py:530 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受库存项未被完成分配至此生产订单" -#: build/serializers.py:537 templates/js/translated/build.js:258 +#: build/serializers.py:540 templates/js/translated/build.js:258 msgid "Required stock has not been fully allocated" msgstr "所需库存尚未完全分配" -#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103 +#: build/serializers.py:545 order/serializers.py:208 order/serializers.py:1107 msgid "Accept Incomplete" msgstr "接受未完成" -#: build/serializers.py:543 +#: build/serializers.py:546 msgid "Accept that the required number of build outputs have not been completed" msgstr "接受所需的生产产出未完成" -#: build/serializers.py:553 templates/js/translated/build.js:262 +#: build/serializers.py:556 templates/js/translated/build.js:262 msgid "Required build quantity has not been completed" msgstr "所需生产数量尚未完成" -#: build/serializers.py:562 templates/js/translated/build.js:246 +#: build/serializers.py:565 templates/js/translated/build.js:246 msgid "Build order has incomplete outputs" msgstr "生产订单有未完成的产出" -#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793 -#: part/models.py:2927 +#: build/serializers.py:595 build/serializers.py:640 part/models.py:2807 +#: part/models.py:2941 msgid "BOM Item" msgstr "BOM项" -#: build/serializers.py:602 +#: build/serializers.py:605 msgid "Build output" msgstr "生产产出" -#: build/serializers.py:610 +#: build/serializers.py:613 msgid "Build output must point to the same build" msgstr "生产产出必须指向相同的生产" -#: build/serializers.py:651 +#: build/serializers.py:654 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必须与生产订单指向相同的部件" -#: build/serializers.py:666 stock/serializers.py:767 +#: build/serializers.py:669 stock/serializers.py:771 msgid "Item must be in stock" msgstr "项目必须在库存中" -#: build/serializers.py:724 order/serializers.py:1093 +#: build/serializers.py:727 order/serializers.py:1097 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出了限制" -#: build/serializers.py:730 +#: build/serializers.py:733 msgid "Build output must be specified for allocation of tracked parts" msgstr "对于被追踪的部件的分配,必须指定生产产出" -#: build/serializers.py:737 +#: build/serializers.py:740 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "对于未被追踪的部件,无法指定生产产出" -#: build/serializers.py:742 +#: build/serializers.py:745 msgid "This stock item has already been allocated to this build output" msgstr "此库存项已被分配至此生产产出" -#: build/serializers.py:765 order/serializers.py:1373 +#: build/serializers.py:768 order/serializers.py:1381 msgid "Allocation items must be provided" msgstr "必须提供分配的项" -#: build/serializers.py:820 +#: build/serializers.py:823 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "部件来源的仓储地点(留空则可来源于任何仓储地点)" -#: build/serializers.py:828 +#: build/serializers.py:831 msgid "Exclude Location" msgstr "排除地点" -#: build/serializers.py:829 +#: build/serializers.py:832 msgid "Exclude stock items from this selected location" msgstr "从该选定的仓储地点排除库存项" -#: build/serializers.py:834 +#: build/serializers.py:837 msgid "Interchangeable Stock" msgstr "可互换的库存" -#: build/serializers.py:835 +#: build/serializers.py:838 msgid "Stock items in multiple locations can be used interchangeably" msgstr "多处地点的库存项可以互换使用" -#: build/serializers.py:840 +#: build/serializers.py:843 msgid "Substitute Stock" msgstr "可替换的库存" -#: build/serializers.py:841 +#: build/serializers.py:844 msgid "Allow allocation of substitute parts" msgstr "允许分配可替换的部件" @@ -1400,7 +1380,7 @@ msgstr "" #: order/templates/order/order_base.html:171 #: order/templates/order/sales_order_base.html:164 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009 +#: templates/js/translated/build.js:2618 templates/js/translated/order.js:2009 #: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852 #: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051 msgid "Target Date" @@ -1490,7 +1470,7 @@ msgstr "" #: build/templates/build/detail.html:126 #: order/templates/order/order_base.html:158 #: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2584 +#: templates/js/translated/build.js:2586 msgid "Created" msgstr "已创建" @@ -1510,7 +1490,7 @@ msgstr "子生产订单" msgid "Allocate Stock to Build" msgstr "为生产分配库存" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967 +#: build/templates/build/detail.html:176 templates/js/translated/build.js:1969 msgid "Unallocate stock" msgstr "未分配库存" @@ -1631,7 +1611,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:324 +#: build/templates/build/index.html:18 part/templates/part/detail.html:318 msgid "New Build Order" msgstr "新建生产订单" @@ -1804,853 +1784,869 @@ msgstr "" msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:890 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" +#: common/models.py:890 +msgid "Automatic Backup" msgstr "" #: common/models.py:891 -msgid "Enable barcode scanner support" -msgstr "启用条形码扫描支持" +msgid "Enable automatic backup of database and media files" +msgstr "" -#: common/models.py:897 -msgid "Barcode Webcam Support" +#: common/models.py:897 templates/InvenTree/settings/sidebar.html:33 +msgid "Barcode Support" msgstr "" #: common/models.py:898 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" +msgid "Enable barcode scanner support" +msgstr "启用条形码扫描支持" #: common/models.py:904 -msgid "IPN Regex" +msgid "Barcode Webcam Support" msgstr "" #: common/models.py:905 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:911 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:912 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:909 +#: common/models.py:916 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:910 +#: common/models.py:917 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:916 +#: common/models.py:923 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:917 +#: common/models.py:924 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:923 +#: common/models.py:930 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:924 +#: common/models.py:931 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:930 +#: common/models.py:937 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:931 +#: common/models.py:938 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:937 +#: common/models.py:944 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:938 +#: common/models.py:945 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:944 +#: common/models.py:951 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:945 +#: common/models.py:952 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:951 part/models.py:2466 report/models.py:158 +#: common/models.py:958 part/models.py:2480 report/models.py:158 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:492 msgid "Template" msgstr "模板" -#: common/models.py:952 +#: common/models.py:959 msgid "Parts are templates by default" msgstr "" -#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1485 +#: common/models.py:965 part/models.py:908 templates/js/translated/bom.js:1526 #: templates/js/translated/table_filters.js:184 #: templates/js/translated/table_filters.js:455 msgid "Assembly" msgstr "组装" -#: common/models.py:959 +#: common/models.py:966 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:965 part/models.py:900 +#: common/models.py:972 part/models.py:914 #: templates/js/translated/table_filters.js:463 msgid "Component" msgstr "组件" -#: common/models.py:966 +#: common/models.py:973 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:972 part/models.py:911 +#: common/models.py:979 part/models.py:925 msgid "Purchaseable" msgstr "可购买" -#: common/models.py:973 +#: common/models.py:980 msgid "Parts are purchaseable by default" msgstr "商品默认可购买" -#: common/models.py:979 part/models.py:916 +#: common/models.py:986 part/models.py:930 #: templates/js/translated/table_filters.js:484 msgid "Salable" msgstr "可销售" -#: common/models.py:980 +#: common/models.py:987 msgid "Parts are salable by default" msgstr "商品默认可销售" -#: common/models.py:986 part/models.py:906 +#: common/models.py:993 part/models.py:920 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:116 #: templates/js/translated/table_filters.js:496 msgid "Trackable" msgstr "可追踪" -#: common/models.py:987 +#: common/models.py:994 msgid "Parts are trackable by default" msgstr "商品默认可跟踪" -#: common/models.py:993 part/models.py:926 +#: common/models.py:1000 part/models.py:940 #: part/templates/part/part_base.html:156 #: templates/js/translated/table_filters.js:42 #: templates/js/translated/table_filters.js:500 msgid "Virtual" msgstr "虚拟" -#: common/models.py:994 +#: common/models.py:1001 msgid "Parts are virtual by default" msgstr "商品默认是虚拟的" -#: common/models.py:1000 +#: common/models.py:1007 msgid "Show Import in Views" msgstr "视图中显示导入" -#: common/models.py:1001 +#: common/models.py:1008 msgid "Display the import wizard in some part views" msgstr "在一些商品视图中显示导入向导" -#: common/models.py:1007 +#: common/models.py:1014 msgid "Show Price in Forms" msgstr "在表格中显示价格" -#: common/models.py:1008 +#: common/models.py:1015 msgid "Display part price in some forms" msgstr "以某些表格显示商品价格" -#: common/models.py:1019 +#: common/models.py:1026 msgid "Show Price in BOM" msgstr "" -#: common/models.py:1020 +#: common/models.py:1027 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:1031 +#: common/models.py:1038 msgid "Show Price History" msgstr "" -#: common/models.py:1032 +#: common/models.py:1039 msgid "Display historical pricing for Part" msgstr "" -#: common/models.py:1038 +#: common/models.py:1045 msgid "Show related parts" msgstr "显示相关商品" -#: common/models.py:1039 +#: common/models.py:1046 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1045 +#: common/models.py:1052 msgid "Create initial stock" msgstr "创建初始库存" -#: common/models.py:1046 +#: common/models.py:1053 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:1052 +#: common/models.py:1059 msgid "Internal Prices" msgstr "内部价格" -#: common/models.py:1053 +#: common/models.py:1060 msgid "Enable internal prices for parts" msgstr "启用内部商品价格" -#: common/models.py:1059 +#: common/models.py:1066 msgid "Internal Price as BOM-Price" msgstr "内部价格为BOM价格" -#: common/models.py:1060 +#: common/models.py:1067 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "在 BOM价格计算中使用内部价格(如设置)" -#: common/models.py:1066 +#: common/models.py:1073 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1067 +#: common/models.py:1074 msgid "Format to display the part name" msgstr "" -#: common/models.py:1074 +#: common/models.py:1081 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1075 +#: common/models.py:1082 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1080 +#: common/models.py:1087 msgid "Enable label printing" msgstr "" -#: common/models.py:1081 +#: common/models.py:1088 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1087 +#: common/models.py:1094 msgid "Label Image DPI" msgstr "" -#: common/models.py:1088 +#: common/models.py:1095 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1097 +#: common/models.py:1104 msgid "Enable Reports" msgstr "" -#: common/models.py:1098 +#: common/models.py:1105 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1104 templates/stats.html:25 +#: common/models.py:1111 templates/stats.html:25 msgid "Debug Mode" msgstr "调试模式" -#: common/models.py:1105 +#: common/models.py:1112 msgid "Generate reports in debug mode (HTML output)" msgstr "在调试模式生成报告(HTML输出)" -#: common/models.py:1111 +#: common/models.py:1118 msgid "Page Size" msgstr "页面大小" -#: common/models.py:1112 +#: common/models.py:1119 msgid "Default page size for PDF reports" msgstr "PDF 报表默认页面大小" -#: common/models.py:1122 +#: common/models.py:1129 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1123 +#: common/models.py:1130 msgid "Enable generation of test reports" msgstr "启用生成测试报表" -#: common/models.py:1129 +#: common/models.py:1136 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1130 +#: common/models.py:1137 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1136 +#: common/models.py:1143 +msgid "Globally Unique Serials" +msgstr "" + +#: common/models.py:1144 +msgid "Serial numbers for stock items must be globally unique" +msgstr "" + +#: common/models.py:1150 msgid "Batch Code Template" msgstr "" -#: common/models.py:1137 +#: common/models.py:1151 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1142 +#: common/models.py:1156 msgid "Stock Expiry" msgstr "库存到期" -#: common/models.py:1143 +#: common/models.py:1157 msgid "Enable stock expiry functionality" msgstr "启用库存到期功能" -#: common/models.py:1149 +#: common/models.py:1163 msgid "Sell Expired Stock" msgstr "销售过期库存" -#: common/models.py:1150 +#: common/models.py:1164 msgid "Allow sale of expired stock" msgstr "允许销售过期库存" -#: common/models.py:1156 +#: common/models.py:1170 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1157 +#: common/models.py:1171 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1159 +#: common/models.py:1173 msgid "days" msgstr "天" -#: common/models.py:1164 +#: common/models.py:1178 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1165 +#: common/models.py:1179 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1171 +#: common/models.py:1185 msgid "Stock Ownership Control" msgstr "库存所有权控制" -#: common/models.py:1172 +#: common/models.py:1186 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1178 +#: common/models.py:1192 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1179 +#: common/models.py:1193 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1184 +#: common/models.py:1198 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1185 +#: common/models.py:1199 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1191 +#: common/models.py:1205 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1192 +#: common/models.py:1206 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1198 +#: common/models.py:1212 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1199 +#: common/models.py:1213 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1205 +#: common/models.py:1219 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1206 +#: common/models.py:1220 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1213 +#: common/models.py:1227 msgid "Enable password forgot" msgstr "" -#: common/models.py:1214 +#: common/models.py:1228 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1220 +#: common/models.py:1234 msgid "Enable registration" msgstr "" -#: common/models.py:1221 +#: common/models.py:1235 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1227 +#: common/models.py:1241 msgid "Enable SSO" msgstr "" -#: common/models.py:1228 +#: common/models.py:1242 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1234 +#: common/models.py:1248 msgid "Email required" msgstr "" -#: common/models.py:1235 +#: common/models.py:1249 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1241 +#: common/models.py:1255 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1242 +#: common/models.py:1256 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1248 +#: common/models.py:1262 msgid "Mail twice" msgstr "" -#: common/models.py:1249 +#: common/models.py:1263 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1255 +#: common/models.py:1269 msgid "Password twice" msgstr "" -#: common/models.py:1256 +#: common/models.py:1270 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1262 +#: common/models.py:1276 msgid "Group on signup" msgstr "" -#: common/models.py:1263 +#: common/models.py:1277 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1269 +#: common/models.py:1283 msgid "Enforce MFA" msgstr "" -#: common/models.py:1270 +#: common/models.py:1284 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1276 +#: common/models.py:1290 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1277 +#: common/models.py:1291 msgid "Check that all plugins are installed on startup - enable in container enviroments" msgstr "" -#: common/models.py:1284 +#: common/models.py:1298 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1285 +#: common/models.py:1299 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1292 +#: common/models.py:1306 msgid "Enable URL integration" msgstr "" -#: common/models.py:1293 +#: common/models.py:1307 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1300 +#: common/models.py:1314 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1301 +#: common/models.py:1315 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1308 +#: common/models.py:1322 msgid "Enable app integration" msgstr "" -#: common/models.py:1309 +#: common/models.py:1323 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1316 +#: common/models.py:1330 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1317 +#: common/models.py:1331 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1324 +#: common/models.py:1338 msgid "Enable event integration" msgstr "" -#: common/models.py:1325 +#: common/models.py:1339 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1344 common/models.py:1672 +#: common/models.py:1358 common/models.py:1686 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1366 +#: common/models.py:1380 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1367 +#: common/models.py:1381 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1373 +#: common/models.py:1387 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1374 +#: common/models.py:1388 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1380 +#: common/models.py:1394 msgid "Show latest parts" msgstr "显示最近商品" -#: common/models.py:1381 +#: common/models.py:1395 msgid "Show latest parts on the homepage" msgstr "在主页上显示最近商品" -#: common/models.py:1387 +#: common/models.py:1401 msgid "Recent Part Count" msgstr "" -#: common/models.py:1388 +#: common/models.py:1402 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1394 +#: common/models.py:1408 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1395 +#: common/models.py:1409 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1401 +#: common/models.py:1415 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1402 +#: common/models.py:1416 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1408 +#: common/models.py:1422 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1409 +#: common/models.py:1423 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1415 +#: common/models.py:1429 msgid "Show low stock" msgstr "" -#: common/models.py:1416 +#: common/models.py:1430 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1422 +#: common/models.py:1436 msgid "Show depleted stock" msgstr "" -#: common/models.py:1423 +#: common/models.py:1437 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1429 +#: common/models.py:1443 msgid "Show needed stock" msgstr "" -#: common/models.py:1430 +#: common/models.py:1444 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1436 +#: common/models.py:1450 msgid "Show expired stock" msgstr "" -#: common/models.py:1437 +#: common/models.py:1451 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1443 +#: common/models.py:1457 msgid "Show stale stock" msgstr "" -#: common/models.py:1444 +#: common/models.py:1458 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1450 +#: common/models.py:1464 msgid "Show pending builds" msgstr "" -#: common/models.py:1451 +#: common/models.py:1465 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1457 +#: common/models.py:1471 msgid "Show overdue builds" msgstr "显示逾期生产" -#: common/models.py:1458 +#: common/models.py:1472 msgid "Show overdue builds on the homepage" msgstr "在主页上显示逾期的生产" -#: common/models.py:1464 +#: common/models.py:1478 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1465 +#: common/models.py:1479 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1471 +#: common/models.py:1485 msgid "Show overdue POs" msgstr "" -#: common/models.py:1472 +#: common/models.py:1486 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1478 +#: common/models.py:1492 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1479 +#: common/models.py:1493 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1485 +#: common/models.py:1499 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1486 +#: common/models.py:1500 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1492 +#: common/models.py:1506 msgid "Inline label display" msgstr "内嵌标签显示" -#: common/models.py:1493 +#: common/models.py:1507 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "在浏览器中显示 PDF 标签,而不是以文件形式下载" -#: common/models.py:1499 +#: common/models.py:1513 msgid "Inline report display" msgstr "" -#: common/models.py:1500 +#: common/models.py:1514 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "在浏览器中显示 PDF 报告,而不是以文件形式下载" -#: common/models.py:1506 +#: common/models.py:1520 msgid "Search Parts" msgstr "" -#: common/models.py:1507 +#: common/models.py:1521 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1513 +#: common/models.py:1527 msgid "Seach Supplier Parts" msgstr "" -#: common/models.py:1514 +#: common/models.py:1528 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1520 +#: common/models.py:1534 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1521 +#: common/models.py:1535 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1527 +#: common/models.py:1541 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1528 +#: common/models.py:1542 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1534 +#: common/models.py:1548 msgid "Search Categories" msgstr "" -#: common/models.py:1535 +#: common/models.py:1549 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1541 +#: common/models.py:1555 msgid "Search Stock" msgstr "" -#: common/models.py:1542 +#: common/models.py:1556 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1548 +#: common/models.py:1562 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1549 +#: common/models.py:1563 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1555 +#: common/models.py:1569 msgid "Search Locations" msgstr "" -#: common/models.py:1556 +#: common/models.py:1570 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1562 +#: common/models.py:1576 msgid "Search Companies" msgstr "" -#: common/models.py:1563 +#: common/models.py:1577 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1569 +#: common/models.py:1583 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1570 +#: common/models.py:1584 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1576 +#: common/models.py:1590 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1577 +#: common/models.py:1591 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1583 +#: common/models.py:1597 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1584 +#: common/models.py:1598 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1590 +#: common/models.py:1604 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1591 +#: common/models.py:1605 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1597 +#: common/models.py:1611 msgid "Search Preview Results" msgstr "搜索预览结果" -#: common/models.py:1598 +#: common/models.py:1612 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1604 +#: common/models.py:1618 msgid "Show Quantity in Forms" msgstr "在表格中显示数量" -#: common/models.py:1605 +#: common/models.py:1619 msgid "Display available part quantity in some forms" msgstr "在某些表格中显示可用的商品数量" -#: common/models.py:1611 +#: common/models.py:1625 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1612 +#: common/models.py:1626 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1618 +#: common/models.py:1632 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1619 +#: common/models.py:1633 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1625 +#: common/models.py:1639 msgid "Date Format" msgstr "" -#: common/models.py:1626 +#: common/models.py:1640 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1640 part/templates/part/detail.html:41 +#: common/models.py:1654 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1641 +#: common/models.py:1655 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1647 +#: common/models.py:1661 msgid "Table String Length" msgstr "" -#: common/models.py:1648 +#: common/models.py:1662 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1712 +#: common/models.py:1726 msgid "Price break quantity" msgstr "" -#: common/models.py:1719 company/serializers.py:372 +#: common/models.py:1733 company/serializers.py:372 #: company/templates/company/supplier_part.html:346 order/models.py:952 #: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221 msgid "Price" msgstr "价格" -#: common/models.py:1720 +#: common/models.py:1734 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1880 common/models.py:2058 +#: common/models.py:1894 common/models.py:2072 msgid "Endpoint" msgstr "" -#: common/models.py:1881 +#: common/models.py:1895 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1890 +#: common/models.py:1904 msgid "Name for this webhook" msgstr "" -#: common/models.py:1895 part/models.py:921 plugin/models.py:100 +#: common/models.py:1909 part/models.py:935 plugin/models.py:100 #: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:112 #: templates/js/translated/table_filters.js:324 @@ -2658,67 +2654,67 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:1896 +#: common/models.py:1910 msgid "Is this webhook active" msgstr "" -#: common/models.py:1910 +#: common/models.py:1924 msgid "Token" msgstr "令牌" -#: common/models.py:1911 +#: common/models.py:1925 msgid "Token for access" msgstr "" -#: common/models.py:1918 +#: common/models.py:1932 msgid "Secret" msgstr "" -#: common/models.py:1919 +#: common/models.py:1933 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2025 +#: common/models.py:2039 msgid "Message ID" msgstr "" -#: common/models.py:2026 +#: common/models.py:2040 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2034 +#: common/models.py:2048 msgid "Host" msgstr "" -#: common/models.py:2035 +#: common/models.py:2049 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2042 +#: common/models.py:2056 msgid "Header" msgstr "" -#: common/models.py:2043 +#: common/models.py:2057 msgid "Header of this message" msgstr "" -#: common/models.py:2049 +#: common/models.py:2063 msgid "Body" msgstr "" -#: common/models.py:2050 +#: common/models.py:2064 msgid "Body of this message" msgstr "" -#: common/models.py:2059 +#: common/models.py:2073 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2064 +#: common/models.py:2078 msgid "Worked on" msgstr "" -#: common/models.py:2065 +#: common/models.py:2079 msgid "Was the work on this message finished?" msgstr "" @@ -2739,6 +2735,10 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" +#: common/notifications.py:414 +msgid "Error raised by plugin" +msgstr "" + #: common/views.py:85 order/templates/order/purchase_order_detail.html:23 #: order/views.py:102 part/views.py:112 #: templates/patterns/wizard/upload.html:37 @@ -2825,7 +2825,7 @@ msgstr "" msgid "Link to external company information" msgstr "链接到外部公司信息" -#: company/models.py:135 part/models.py:815 +#: company/models.py:135 part/models.py:829 msgid "Image" msgstr "图片" @@ -2867,9 +2867,9 @@ msgstr "货币" msgid "Default currency used for this company" msgstr "该公司使用的默认货币" -#: company/models.py:248 company/models.py:482 stock/models.py:544 +#: company/models.py:248 company/models.py:482 stock/models.py:600 #: stock/serializers.py:85 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:543 +#: templates/js/translated/bom.js:568 msgid "Base Part" msgstr "" @@ -2928,7 +2928,7 @@ msgstr "参数名称" #: company/models.py:365 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2041 templates/js/translated/company.js:581 +#: stock/models.py:2097 templates/js/translated/company.js:581 #: templates/js/translated/company.js:799 templates/js/translated/part.js:847 #: templates/js/translated/stock.js:1360 msgid "Value" @@ -2938,7 +2938,7 @@ msgstr "数值" msgid "Parameter value" msgstr "参数值" -#: company/models.py:372 part/models.py:888 part/models.py:2426 +#: company/models.py:372 part/models.py:902 part/models.py:2440 #: part/templates/part/part_base.html:286 #: templates/InvenTree/settings/settings.html:352 #: templates/js/translated/company.js:805 templates/js/translated/part.js:853 @@ -2994,22 +2994,22 @@ msgid "Supplier part description" msgstr "供应商商品描述" #: company/models.py:523 company/templates/company/supplier_part.html:181 -#: part/models.py:2679 part/templates/part/upload_bom.html:59 +#: part/models.py:2693 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399 +#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:403 msgid "Note" msgstr "备注" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "base cost" msgstr "" -#: company/models.py:527 part/models.py:1774 +#: company/models.py:527 part/models.py:1788 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低收费(例如库存费)" #: company/models.py:529 company/templates/company/supplier_part.html:167 -#: stock/models.py:570 stock/templates/stock/item_base.html:243 +#: stock/models.py:626 stock/templates/stock/item_base.html:243 #: templates/js/translated/company.js:991 templates/js/translated/stock.js:1978 msgid "Packaging" msgstr "打包" @@ -3031,7 +3031,7 @@ msgstr "" msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:539 part/models.py:1776 +#: company/models.py:539 part/models.py:1790 msgid "multiple" msgstr "" @@ -3042,8 +3042,8 @@ msgstr "" #: company/models.py:547 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839 -#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598 +#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:2718 templates/js/translated/part.js:598 #: templates/js/translated/part.js:601 #: templates/js/translated/table_filters.js:194 msgid "Available" @@ -3117,8 +3117,8 @@ msgid "Download image from URL" msgstr "从 URL 下载图片" #: company/templates/company/company_base.html:86 order/models.py:646 -#: order/templates/order/sales_order_base.html:116 stock/models.py:589 -#: stock/models.py:590 stock/serializers.py:809 +#: order/templates/order/sales_order_base.html:116 stock/models.py:645 +#: stock/models.py:646 stock/serializers.py:813 #: stock/templates/stock/item_base.html:399 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:428 templates/js/translated/order.js:2813 @@ -3136,12 +3136,12 @@ msgid "Phone" msgstr "电话" #: company/templates/company/company_base.html:208 -#: part/templates/part/part_base.html:497 +#: part/templates/part/part_base.html:499 msgid "Upload Image" msgstr "上传图片" #: company/templates/company/company_base.html:223 -#: part/templates/part/part_base.html:552 +#: part/templates/part/part_base.html:554 msgid "Download Image" msgstr "下载图片" @@ -3157,7 +3157,7 @@ msgstr "创建新的供应商商品" #: company/templates/company/detail.html:19 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:365 +#: part/templates/part/detail.html:359 msgid "New Supplier Part" msgstr "新建供应商商品" @@ -3186,7 +3186,7 @@ msgstr "制造商商品" msgid "Create new manufacturer part" msgstr "新建制造商商品" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:395 +#: company/templates/company/detail.html:66 part/templates/part/detail.html:389 msgid "New Manufacturer Part" msgstr "新建制造商商品" @@ -3242,7 +3242,7 @@ msgid "New Sales Order" msgstr "新建销售订单" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1709 +#: templates/js/translated/build.js:1711 msgid "Assigned Stock" msgstr "" @@ -3289,13 +3289,13 @@ msgid "Suppliers" msgstr "供应商" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:370 msgid "Delete supplier parts" msgstr "删除供应商商品" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:377 part/templates/part/detail.html:407 +#: part/templates/part/detail.html:371 part/templates/part/detail.html:401 #: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36 #: users/models.py:222 msgid "Delete" @@ -3320,7 +3320,7 @@ msgid "Delete parameters" msgstr "删除参数" #: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:845 +#: part/templates/part/detail.html:827 msgid "Add Parameter" msgstr "添加参数" @@ -3341,7 +3341,7 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:553 +#: company/templates/company/supplier_part.html:24 stock/models.py:609 #: stock/templates/stock/item_base.html:236 #: templates/js/translated/company.js:945 templates/js/translated/order.js:1135 #: templates/js/translated/stock.js:1935 @@ -3809,7 +3809,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:685 +#: order/models.py:1031 part/templates/part/prices.html:181 stock/models.py:741 #: stock/serializers.py:169 stock/templates/stock/item_base.html:189 #: templates/js/translated/stock.js:1966 msgid "Purchase Price" @@ -3856,8 +3856,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:1234 order/models.py:1419 order/serializers.py:1224 -#: order/serializers.py:1348 templates/js/translated/model_renderers.js:314 +#: order/models.py:1234 order/models.py:1419 order/serializers.py:1228 +#: order/serializers.py:1356 templates/js/translated/model_renderers.js:314 msgid "Shipment" msgstr "" @@ -3909,7 +3909,7 @@ msgstr "" msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1399 order/serializers.py:1086 +#: order/models.py:1399 order/serializers.py:1090 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -3949,11 +3949,11 @@ msgstr "" msgid "Order cannot be cancelled" msgstr "无法取消订单" -#: order/serializers.py:209 order/serializers.py:1104 +#: order/serializers.py:209 order/serializers.py:1108 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:220 order/serializers.py:1115 +#: order/serializers.py:220 order/serializers.py:1119 msgid "Order has incomplete line items" msgstr "" @@ -3981,7 +3981,7 @@ msgstr "" msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:430 order/serializers.py:1192 +#: order/serializers.py:430 order/serializers.py:1196 msgid "Line Item" msgstr "" @@ -3989,7 +3989,7 @@ msgstr "" msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:446 order/serializers.py:553 +#: order/serializers.py:446 order/serializers.py:557 msgid "Select destination location for received items" msgstr "" @@ -4013,51 +4013,51 @@ msgstr "" msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:569 +#: order/serializers.py:573 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:586 +#: order/serializers.py:590 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:597 +#: order/serializers.py:601 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:907 msgid "Sale price currency" msgstr "" -#: order/serializers.py:984 +#: order/serializers.py:988 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1047 order/serializers.py:1201 +#: order/serializers.py:1051 order/serializers.py:1205 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1069 +#: order/serializers.py:1073 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1214 +#: order/serializers.py:1218 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1356 +#: order/serializers.py:1240 order/serializers.py:1364 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1239 order/serializers.py:1359 +#: order/serializers.py:1243 order/serializers.py:1367 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1289 +#: order/serializers.py:1297 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1299 +#: order/serializers.py:1307 msgid "The following serial numbers are already allocated" msgstr "" @@ -4070,11 +4070,11 @@ msgstr "" msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:88 +#: order/tasks.py:89 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:93 +#: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" @@ -4200,8 +4200,8 @@ msgstr "选择供应商商品" #: 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_references.html:49 -#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479 -#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:479 +#: templates/js/translated/build.js:631 templates/js/translated/build.js:2042 #: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586 #: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625 #: templates/js/translated/stock.js:793 @@ -4323,8 +4323,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133 -#: templates/js/translated/build.js:1943 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1158 +#: templates/js/translated/build.js:1945 msgid "Actions" msgstr "" @@ -4398,8 +4398,8 @@ msgstr "指定初始初始商品仓储地点" msgid "This field is required" msgstr "此字段为必填" -#: part/bom.py:127 part/models.py:98 part/models.py:824 -#: part/templates/part/category.html:114 part/templates/part/part_base.html:343 +#: part/bom.py:127 part/models.py:98 part/models.py:838 +#: part/templates/part/category.html:114 part/templates/part/part_base.html:345 msgid "Default Location" msgstr "默认仓储地点" @@ -4413,7 +4413,7 @@ msgid "Available Stock" msgstr "可用库存" #: part/bom.py:130 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890 +#: templates/js/translated/bom.js:1001 templates/js/translated/build.js:1892 #: templates/js/translated/part.js:588 templates/js/translated/part.js:608 #: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524 #: templates/js/translated/table_filters.js:68 @@ -4444,7 +4444,7 @@ msgstr "" msgid "Icon (optional)" msgstr "" -#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16 +#: part/models.py:122 part/models.py:2523 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "商品类别" @@ -4475,56 +4475,48 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:628 -msgid "Next available serial numbers are" +#: part/models.py:601 +msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:632 -msgid "Next available serial number is" -msgstr "" - -#: part/models.py:637 -msgid "Most recent serial number is" -msgstr "" - -#: part/models.py:718 +#: part/models.py:732 msgid "Duplicate IPN not allowed in part settings" msgstr "在商品设置中不允许重复的IPN" -#: part/models.py:745 part/models.py:2565 +#: part/models.py:759 part/models.py:2579 msgid "Part name" msgstr "商品名称" -#: part/models.py:752 +#: part/models.py:766 msgid "Is Template" msgstr "" -#: part/models.py:753 +#: part/models.py:767 msgid "Is this part a template part?" msgstr "" -#: part/models.py:763 +#: part/models.py:777 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:764 +#: part/models.py:778 msgid "Variant Of" msgstr "" -#: part/models.py:770 +#: part/models.py:784 msgid "Part description" msgstr "商品描述" -#: part/models.py:775 part/templates/part/category.html:92 +#: part/models.py:789 part/templates/part/category.html:92 #: part/templates/part/part_base.html:300 msgid "Keywords" msgstr "关键词" -#: part/models.py:776 +#: part/models.py:790 msgid "Part keywords to improve visibility in search results" msgstr "提高搜索结果可见性的关键字" -#: part/models.py:783 part/models.py:2258 part/models.py:2508 +#: part/models.py:797 part/models.py:2272 part/models.py:2522 #: part/templates/part/part_base.html:263 #: templates/InvenTree/settings/settings.html:232 #: templates/js/translated/notification.js:50 @@ -4532,367 +4524,367 @@ msgstr "提高搜索结果可见性的关键字" msgid "Category" msgstr "类别" -#: part/models.py:784 +#: part/models.py:798 msgid "Part category" msgstr "商品类别" -#: part/models.py:789 part/templates/part/part_base.html:272 +#: part/models.py:803 part/templates/part/part_base.html:272 #: templates/js/translated/part.js:737 templates/js/translated/part.js:1429 #: templates/js/translated/stock.js:1726 msgid "IPN" msgstr "" -#: part/models.py:790 +#: part/models.py:804 msgid "Internal Part Number" msgstr "内部商品编号" -#: part/models.py:796 +#: part/models.py:810 msgid "Part revision or version number" msgstr "商品版本号" -#: part/models.py:797 part/templates/part/part_base.html:279 +#: part/models.py:811 part/templates/part/part_base.html:279 #: report/models.py:171 templates/js/translated/part.js:741 msgid "Revision" msgstr "" -#: part/models.py:822 +#: part/models.py:836 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:867 part/templates/part/part_base.html:352 +#: part/models.py:881 part/templates/part/part_base.html:354 msgid "Default Supplier" msgstr "" -#: part/models.py:868 +#: part/models.py:882 msgid "Default supplier part" msgstr "默认供应商商品" -#: part/models.py:875 +#: part/models.py:889 msgid "Default Expiry" msgstr "" -#: part/models.py:876 +#: part/models.py:890 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:881 part/templates/part/part_base.html:206 +#: part/models.py:895 part/templates/part/part_base.html:206 msgid "Minimum Stock" msgstr "最低库存" -#: part/models.py:882 +#: part/models.py:896 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:889 +#: part/models.py:903 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:895 +#: part/models.py:909 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:901 +#: part/models.py:915 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:907 +#: part/models.py:921 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:912 +#: part/models.py:926 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:917 +#: part/models.py:931 msgid "Can this part be sold to customers?" msgstr "此商品可以销售给客户吗?" -#: part/models.py:922 +#: part/models.py:936 msgid "Is this part active?" msgstr "" -#: part/models.py:927 +#: part/models.py:941 msgid "Is this a virtual part, such as a software product or license?" msgstr "这是一个虚拟商品,如软件产品或许可证吗?" -#: part/models.py:929 +#: part/models.py:943 msgid "Part notes" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "BOM checksum" msgstr "" -#: part/models.py:931 +#: part/models.py:945 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:934 +#: part/models.py:948 msgid "BOM checked by" msgstr "" -#: part/models.py:936 +#: part/models.py:950 msgid "BOM checked date" msgstr "" -#: part/models.py:940 +#: part/models.py:954 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1776 +#: part/models.py:1790 msgid "Sell multiple" msgstr "" -#: part/models.py:2305 +#: part/models.py:2319 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2322 +#: part/models.py:2336 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2342 templates/js/translated/part.js:2066 +#: part/models.py:2356 templates/js/translated/part.js:2066 #: templates/js/translated/stock.js:1340 msgid "Test Name" msgstr "" -#: part/models.py:2343 +#: part/models.py:2357 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2348 +#: part/models.py:2362 msgid "Test Description" msgstr "" -#: part/models.py:2349 +#: part/models.py:2363 msgid "Enter description for this test" msgstr "" -#: part/models.py:2354 templates/js/translated/part.js:2075 +#: part/models.py:2368 templates/js/translated/part.js:2075 #: templates/js/translated/table_filters.js:310 msgid "Required" msgstr "" -#: part/models.py:2355 +#: part/models.py:2369 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2360 templates/js/translated/part.js:2083 +#: part/models.py:2374 templates/js/translated/part.js:2083 msgid "Requires Value" msgstr "" -#: part/models.py:2361 +#: part/models.py:2375 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2366 templates/js/translated/part.js:2090 +#: part/models.py:2380 templates/js/translated/part.js:2090 msgid "Requires Attachment" msgstr "" -#: part/models.py:2367 +#: part/models.py:2381 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2375 +#: part/models.py:2389 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2411 +#: part/models.py:2425 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2419 +#: part/models.py:2433 msgid "Parameter Name" msgstr "" -#: part/models.py:2426 +#: part/models.py:2440 msgid "Parameter Units" msgstr "" -#: part/models.py:2431 +#: part/models.py:2445 msgid "Parameter description" msgstr "" -#: part/models.py:2464 +#: part/models.py:2478 msgid "Parent Part" msgstr "" -#: part/models.py:2466 part/models.py:2514 part/models.py:2515 +#: part/models.py:2480 part/models.py:2528 part/models.py:2529 #: templates/InvenTree/settings/settings.html:227 msgid "Parameter Template" msgstr "参数模板" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Data" msgstr "" -#: part/models.py:2468 +#: part/models.py:2482 msgid "Parameter Value" msgstr "" -#: part/models.py:2519 templates/InvenTree/settings/settings.html:236 +#: part/models.py:2533 templates/InvenTree/settings/settings.html:236 msgid "Default Value" msgstr "默认值" -#: part/models.py:2520 +#: part/models.py:2534 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2557 +#: part/models.py:2571 msgid "Part ID or part name" msgstr "" -#: part/models.py:2560 templates/js/translated/model_renderers.js:212 +#: part/models.py:2574 templates/js/translated/model_renderers.js:212 msgid "Part ID" msgstr "商品ID" -#: part/models.py:2561 +#: part/models.py:2575 msgid "Unique part ID value" msgstr "" -#: part/models.py:2564 +#: part/models.py:2578 msgid "Part Name" msgstr "" -#: part/models.py:2568 +#: part/models.py:2582 msgid "Part IPN" msgstr "" -#: part/models.py:2569 +#: part/models.py:2583 msgid "Part IPN value" msgstr "" -#: part/models.py:2572 +#: part/models.py:2586 msgid "Level" msgstr "" -#: part/models.py:2573 +#: part/models.py:2587 msgid "BOM level" msgstr "" -#: part/models.py:2642 +#: part/models.py:2656 msgid "Select parent part" msgstr "" -#: part/models.py:2650 +#: part/models.py:2664 msgid "Sub part" msgstr "" -#: part/models.py:2651 +#: part/models.py:2665 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2657 +#: part/models.py:2671 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2661 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999 +#: part/models.py:2675 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:924 templates/js/translated/bom.js:1024 #: templates/js/translated/table_filters.js:84 #: templates/js/translated/table_filters.js:108 msgid "Optional" msgstr "可选项" -#: part/models.py:2662 +#: part/models.py:2676 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2667 templates/js/translated/bom.js:895 -#: templates/js/translated/bom.js:1008 +#: part/models.py:2681 templates/js/translated/bom.js:920 +#: templates/js/translated/bom.js:1033 #: templates/js/translated/table_filters.js:88 msgid "Consumable" msgstr "" -#: part/models.py:2668 +#: part/models.py:2682 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:2672 part/templates/part/upload_bom.html:55 +#: part/models.py:2686 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:2673 +#: part/models.py:2687 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2676 +#: part/models.py:2690 msgid "BOM item reference" msgstr "" -#: part/models.py:2679 +#: part/models.py:2693 msgid "BOM item notes" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "Checksum" msgstr "" -#: part/models.py:2681 +#: part/models.py:2695 msgid "BOM line checksum" msgstr "" -#: part/models.py:2685 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1025 +#: part/models.py:2699 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1050 #: templates/js/translated/table_filters.js:76 #: templates/js/translated/table_filters.js:104 msgid "Inherited" msgstr "继承项" -#: part/models.py:2686 +#: part/models.py:2700 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2691 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1017 +#: part/models.py:2705 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1042 msgid "Allow Variants" msgstr "" -#: part/models.py:2692 +#: part/models.py:2706 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2778 stock/models.py:446 +#: part/models.py:2792 stock/models.py:502 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2787 part/models.py:2789 +#: part/models.py:2801 part/models.py:2803 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2894 +#: part/models.py:2908 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2915 +#: part/models.py:2929 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2928 +#: part/models.py:2942 msgid "Parent BOM item" msgstr "" -#: part/models.py:2936 +#: part/models.py:2950 msgid "Substitute part" msgstr "" -#: part/models.py:2951 +#: part/models.py:2965 msgid "Part 1" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Part 2" msgstr "" -#: part/models.py:2955 +#: part/models.py:2969 msgid "Select Related Part" msgstr "" -#: part/models.py:2973 +#: part/models.py:2987 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:2977 +#: part/models.py:2991 msgid "Duplicate relationship already exists" msgstr "" @@ -5065,12 +5057,12 @@ msgstr "商品 (包括子类别)" msgid "Create new part" msgstr "新建商品" -#: part/templates/part/category.html:164 templates/js/translated/bom.js:367 +#: part/templates/part/category.html:164 templates/js/translated/bom.js:392 msgid "New Part" msgstr "新商品" -#: part/templates/part/category.html:174 part/templates/part/detail.html:374 -#: part/templates/part/detail.html:405 +#: part/templates/part/category.html:174 part/templates/part/detail.html:368 +#: part/templates/part/detail.html:399 msgid "Options" msgstr "选项" @@ -5194,7 +5186,7 @@ msgstr "" msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:261 templates/js/translated/bom.js:284 +#: part/templates/part/detail.html:261 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" @@ -5214,70 +5206,63 @@ msgstr "" msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:280 part/templates/part/detail.html:290 -msgid "New BOM Item" -msgstr "" - -#: part/templates/part/detail.html:281 part/templates/part/detail.html:291 +#: part/templates/part/detail.html:280 part/templates/part/detail.html:281 +#: templates/js/translated/bom.js:1202 templates/js/translated/bom.js:1203 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:300 +#: part/templates/part/detail.html:294 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:318 +#: part/templates/part/detail.html:312 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:345 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:339 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:361 +#: part/templates/part/detail.html:355 msgid "Part Suppliers" msgstr "商品供应商" -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:385 msgid "Part Manufacturers" msgstr "商品制造商" -#: part/templates/part/detail.html:407 +#: part/templates/part/detail.html:401 msgid "Delete manufacturer parts" msgstr "删除制造商商品" -#: part/templates/part/detail.html:632 -msgid "Create BOM Item" -msgstr "" - -#: part/templates/part/detail.html:676 +#: part/templates/part/detail.html:658 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:684 +#: part/templates/part/detail.html:666 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:776 +#: part/templates/part/detail.html:758 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:919 +#: part/templates/part/detail.html:901 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:931 +#: part/templates/part/detail.html:913 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:943 +#: part/templates/part/detail.html:925 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1032 +#: part/templates/part/detail.html:1014 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -5420,7 +5405,7 @@ msgid "Inactive" msgstr "" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:618 +#: part/templates/part/part_base.html:620 msgid "Show Part Details" msgstr "" @@ -5445,7 +5430,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075 +#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1100 msgid "Can Build" msgstr "" @@ -5459,28 +5444,28 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:329 +#: part/templates/part/part_base.html:330 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:333 +#: part/templates/part/part_base.html:334 #: stock/templates/stock/item_base.html:331 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:429 +#: part/templates/part/part_base.html:431 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149 +#: part/templates/part/part_base.html:477 part/templates/part/prices.html:149 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:518 +#: part/templates/part/part_base.html:520 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:614 msgid "Hide Part Details" msgstr "" @@ -5507,7 +5492,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43 -#: templates/js/translated/bom.js:1066 +#: templates/js/translated/bom.js:1091 msgid "No supplier pricing available" msgstr "" @@ -5602,7 +5587,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060 +#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1085 msgid "Supplier Cost" msgstr "" @@ -5744,23 +5729,23 @@ msgstr "未指定操作" msgid "No matching action found" msgstr "未找到指定操作" -#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109 +#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:110 msgid "Must provide barcode_data parameter" msgstr "必须提供条码数据参数" -#: plugin/base/barcodes/api.py:81 +#: plugin/base/barcodes/api.py:82 msgid "No match found for barcode data" msgstr "未找到匹配条形码数据" -#: plugin/base/barcodes/api.py:85 +#: plugin/base/barcodes/api.py:86 msgid "Match found for barcode data" msgstr "找到匹配条形码数据" -#: plugin/base/barcodes/api.py:124 +#: plugin/base/barcodes/api.py:125 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:210 +#: plugin/base/barcodes/api.py:222 msgid "No match found for provided value" msgstr "" @@ -5822,7 +5807,7 @@ msgstr "" msgid "Sample plugin" msgstr "" -#: plugin/models.py:188 +#: plugin/models.py:188 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" @@ -5838,6 +5823,20 @@ msgstr "" msgid "No date found" msgstr "" +#: plugin/registry.py:431 +msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +msgstr "" + +#: plugin/registry.py:433 +#, python-brace-format +msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgstr "" + +#: plugin/registry.py:435 +#, python-brace-format +msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgstr "" + #: plugin/samples/integration/sample.py:39 msgid "Enable PO" msgstr "" @@ -6012,9 +6011,9 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:594 stock/templates/stock/item_base.html:320 +#: stock/models.py:650 stock/templates/stock/item_base.html:320 #: templates/js/translated/build.js:472 templates/js/translated/build.js:624 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 +#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1724 #: templates/js/translated/model_renderers.js:118 #: templates/js/translated/order.js:121 templates/js/translated/order.js:3597 #: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490 @@ -6026,12 +6025,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2029 +#: stock/models.py:2085 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2035 +#: stock/models.py:2091 msgid "Result" msgstr "" @@ -6066,241 +6065,237 @@ msgstr "" msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:90 stock/models.py:690 +#: stock/models.py:90 stock/models.py:746 #: stock/templates/stock/item_base.html:250 msgid "Owner" msgstr "" -#: stock/models.py:91 stock/models.py:691 +#: stock/models.py:91 stock/models.py:747 msgid "Select Owner" msgstr "" -#: stock/models.py:420 -msgid "StockItem with this serial number already exists" -msgstr "" - -#: stock/models.py:452 stock/serializers.py:93 +#: stock/models.py:508 stock/serializers.py:93 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:469 +#: stock/models.py:525 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "商品类型 ('{pf}') 必须是 {pe}" -#: stock/models.py:479 stock/models.py:488 +#: stock/models.py:535 stock/models.py:544 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:480 +#: stock/models.py:536 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:502 +#: stock/models.py:558 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:508 +#: stock/models.py:564 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:522 +#: stock/models.py:578 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:536 +#: stock/models.py:592 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:546 +#: stock/models.py:602 msgid "Base part" msgstr "" -#: stock/models.py:554 +#: stock/models.py:610 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:561 stock/templates/stock/location.html:17 +#: stock/models.py:617 stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "仓储地点" -#: stock/models.py:564 +#: stock/models.py:620 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:571 +#: stock/models.py:627 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:577 stock/templates/stock/item_base.html:359 +#: stock/models.py:633 stock/templates/stock/item_base.html:359 msgid "Installed In" msgstr "" -#: stock/models.py:580 +#: stock/models.py:636 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:596 +#: stock/models.py:652 msgid "Serial number for this item" msgstr "" -#: stock/models.py:610 +#: stock/models.py:666 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:615 +#: stock/models.py:671 msgid "Stock Quantity" msgstr "" -#: stock/models.py:624 +#: stock/models.py:680 msgid "Source Build" msgstr "" -#: stock/models.py:626 +#: stock/models.py:682 msgid "Build for this stock item" msgstr "" -#: stock/models.py:637 +#: stock/models.py:693 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:640 +#: stock/models.py:696 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:646 +#: stock/models.py:702 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:652 stock/templates/stock/item_base.html:427 +#: stock/models.py:708 stock/templates/stock/item_base.html:427 #: templates/js/translated/stock.js:1885 msgid "Expiry Date" msgstr "" -#: stock/models.py:653 +#: stock/models.py:709 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete on deplete" msgstr "" -#: stock/models.py:666 +#: stock/models.py:722 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:678 stock/templates/stock/item.html:132 +#: stock/models.py:734 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:686 +#: stock/models.py:742 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:714 +#: stock/models.py:770 msgid "Converted to part" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1244 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1250 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1200 +#: stock/models.py:1256 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1203 +#: stock/models.py:1259 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1206 +#: stock/models.py:1262 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1213 +#: stock/models.py:1269 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1283 +#: stock/models.py:1339 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1286 +#: stock/models.py:1342 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1289 +#: stock/models.py:1345 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1292 +#: stock/models.py:1348 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1295 +#: stock/models.py:1351 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1298 +#: stock/models.py:1354 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1305 stock/serializers.py:959 +#: stock/models.py:1361 stock/serializers.py:963 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1365 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1313 +#: stock/models.py:1369 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1373 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1486 +#: stock/models.py:1542 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1947 +#: stock/models.py:2003 msgid "Entry notes" msgstr "" -#: stock/models.py:2005 +#: stock/models.py:2061 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2011 +#: stock/models.py:2067 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2030 +#: stock/models.py:2086 msgid "Test name" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2092 msgid "Test result" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2098 msgid "Test output value" msgstr "" -#: stock/models.py:2049 +#: stock/models.py:2105 msgid "Test result attachment" msgstr "" -#: stock/models.py:2055 +#: stock/models.py:2111 msgid "Test notes" msgstr "" @@ -6325,7 +6320,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "输入新项目的序列号" -#: stock/serializers.py:321 stock/serializers.py:916 stock/serializers.py:1149 +#: stock/serializers.py:321 stock/serializers.py:920 stock/serializers.py:1153 msgid "Destination stock location" msgstr "目标库存位置" @@ -6337,99 +6332,99 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:355 +#: stock/serializers.py:359 msgid "Serial numbers already exist" msgstr "序列号已存在" -#: stock/serializers.py:395 +#: stock/serializers.py:399 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:408 +#: stock/serializers.py:412 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:452 +#: stock/serializers.py:456 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:457 stock/serializers.py:538 +#: stock/serializers.py:461 stock/serializers.py:542 msgid "Add transaction note (optional)" msgstr "添加交易备注 (可选)" -#: stock/serializers.py:491 +#: stock/serializers.py:495 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:506 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:533 +#: stock/serializers.py:537 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:775 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:779 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:783 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:810 +#: stock/serializers.py:814 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:820 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:828 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:834 stock/serializers.py:1065 +#: stock/serializers.py:838 stock/serializers.py:1069 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:923 +#: stock/serializers.py:927 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:928 +#: stock/serializers.py:932 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:929 +#: stock/serializers.py:933 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:934 +#: stock/serializers.py:938 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:935 +#: stock/serializers.py:939 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:945 +#: stock/serializers.py:949 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1027 +#: stock/serializers.py:1031 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1055 +#: stock/serializers.py:1059 msgid "Stock transaction notes" msgstr "" @@ -6618,7 +6613,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1745 +#: templates/js/translated/build.js:1747 msgid "No location set" msgstr "未设置仓储地点" @@ -7084,11 +7079,6 @@ msgstr "" msgid "Message" msgstr "" -#: templates/InvenTree/settings/plugin_settings.html:10 -#, python-format -msgid "Plugin details for %(name)s" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7806,7 +7796,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1520 +#: templates/js/translated/bom.js:1561 msgid "Required Quantity" msgstr "" @@ -8011,15 +8001,19 @@ msgstr "" msgid "Barcode does not match a valid location" msgstr "" -#: templates/js/translated/bom.js:76 +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 msgid "Display row data" msgstr "" -#: templates/js/translated/bom.js:132 +#: templates/js/translated/bom.js:157 msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:646 #: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601 #: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003 #: templates/js/translated/order.js:1179 templates/modals.html:15 @@ -8027,180 +8021,180 @@ msgstr "" msgid "Close" msgstr "" -#: templates/js/translated/bom.js:250 +#: templates/js/translated/bom.js:275 msgid "Download BOM Template" msgstr "" -#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 #: templates/js/translated/order.js:960 templates/js/translated/tables.js:145 msgid "Format" msgstr "" -#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 #: templates/js/translated/order.js:961 msgid "Select file format" msgstr "" -#: templates/js/translated/bom.js:295 +#: templates/js/translated/bom.js:320 msgid "Multi Level BOM" msgstr "" -#: templates/js/translated/bom.js:296 +#: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" msgstr "" -#: templates/js/translated/bom.js:301 +#: templates/js/translated/bom.js:326 msgid "Levels" msgstr "等级" -#: templates/js/translated/bom.js:302 +#: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" -#: templates/js/translated/bom.js:309 +#: templates/js/translated/bom.js:334 msgid "Include Parameter Data" msgstr "包含参数数据" -#: templates/js/translated/bom.js:310 +#: templates/js/translated/bom.js:335 msgid "Include part parameter data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:315 +#: templates/js/translated/bom.js:340 msgid "Include Stock Data" msgstr "包括库存数据" -#: templates/js/translated/bom.js:316 +#: templates/js/translated/bom.js:341 msgid "Include part stock data in exported BOM" msgstr "在导出 BOM 中包括库存数据" -#: templates/js/translated/bom.js:321 +#: templates/js/translated/bom.js:346 msgid "Include Manufacturer Data" msgstr "包括制造商数据" -#: templates/js/translated/bom.js:322 +#: templates/js/translated/bom.js:347 msgid "Include part manufacturer data in exported BOM" msgstr "在导出 BOM 中包含制造商数据" -#: templates/js/translated/bom.js:327 +#: templates/js/translated/bom.js:352 msgid "Include Supplier Data" msgstr "包含供应商数据" -#: templates/js/translated/bom.js:328 +#: templates/js/translated/bom.js:353 msgid "Include part supplier data in exported BOM" msgstr "在导出 BOM 中包含供应商数据" -#: templates/js/translated/bom.js:512 +#: templates/js/translated/bom.js:537 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:566 +#: templates/js/translated/bom.js:591 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:577 +#: templates/js/translated/bom.js:602 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:583 +#: templates/js/translated/bom.js:608 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:647 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:623 +#: templates/js/translated/bom.js:648 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:685 +#: templates/js/translated/bom.js:710 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:701 +#: templates/js/translated/bom.js:726 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:835 +#: templates/js/translated/bom.js:860 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:845 +#: templates/js/translated/bom.js:870 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821 +#: templates/js/translated/bom.js:874 templates/js/translated/build.js:1823 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872 +#: templates/js/translated/bom.js:983 templates/js/translated/build.js:1874 #: templates/js/translated/order.js:3932 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876 +#: templates/js/translated/bom.js:988 templates/js/translated/build.js:1878 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878 +#: templates/js/translated/bom.js:990 templates/js/translated/build.js:1880 #: templates/js/translated/part.js:761 templates/js/translated/part.js:1537 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880 +#: templates/js/translated/bom.js:992 templates/js/translated/build.js:1882 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:985 +#: templates/js/translated/bom.js:1010 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170 +#: templates/js/translated/bom.js:1061 templates/js/translated/bom.js:1195 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1046 +#: templates/js/translated/bom.js:1071 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:1053 +#: templates/js/translated/bom.js:1078 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863 -#: templates/js/translated/build.js:1947 +#: templates/js/translated/bom.js:1106 templates/js/translated/build.js:1865 +#: templates/js/translated/build.js:1949 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1141 +#: templates/js/translated/bom.js:1166 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1143 +#: templates/js/translated/bom.js:1168 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1145 +#: templates/js/translated/bom.js:1170 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1323 +#: templates/js/translated/bom.js:1172 templates/js/translated/bom.js:1364 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1149 +#: templates/js/translated/bom.js:1174 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1248 templates/js/translated/build.js:1666 +#: templates/js/translated/bom.js:1280 templates/js/translated/build.js:1668 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1503 templates/js/translated/build.js:1805 +#: templates/js/translated/bom.js:1544 templates/js/translated/build.js:1807 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1529 +#: templates/js/translated/bom.js:1570 msgid "Inherited from parent BOM" msgstr "" @@ -8330,158 +8324,158 @@ msgstr "未指定仓储地点" msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1254 +#: templates/js/translated/build.js:1256 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1261 +#: templates/js/translated/build.js:1263 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1285 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1288 +#: templates/js/translated/build.js:1290 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727 +#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2729 #: templates/js/translated/order.js:3632 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728 +#: templates/js/translated/build.js:1766 templates/js/translated/build.js:2730 #: templates/js/translated/order.js:3633 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1782 +#: templates/js/translated/build.js:1784 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1792 +#: templates/js/translated/build.js:1794 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1817 +#: templates/js/translated/build.js:1819 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1834 +#: templates/js/translated/build.js:1836 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3939 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1870 templates/js/translated/order.js:3937 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157 -#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951 +#: templates/js/translated/build.js:1904 templates/js/translated/build.js:2159 +#: templates/js/translated/build.js:2725 templates/js/translated/order.js:3951 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:1957 templates/js/translated/order.js:4031 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1959 templates/stock_table.html:50 +#: templates/js/translated/build.js:1961 templates/stock_table.html:50 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:1964 templates/js/translated/order.js:4024 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172 +#: templates/js/translated/build.js:2003 templates/js/translated/label.js:172 #: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159 #: templates/js/translated/report.js:225 msgid "Select Parts" msgstr "选择商品" -#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160 +#: templates/js/translated/build.js:2004 templates/js/translated/order.js:3160 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108 +#: templates/js/translated/build.js:2053 templates/js/translated/order.js:3108 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2130 +#: templates/js/translated/build.js:2132 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2133 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2147 templates/js/translated/order.js:3174 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2173 +#: templates/js/translated/build.js:2175 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271 +#: templates/js/translated/build.js:2186 templates/js/translated/order.js:3271 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348 +#: templates/js/translated/build.js:2258 templates/js/translated/order.js:3348 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2353 +#: templates/js/translated/build.js:2355 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2354 +#: templates/js/translated/build.js:2356 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2356 +#: templates/js/translated/build.js:2358 msgid "If a location is specifed, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2357 +#: templates/js/translated/build.js:2359 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2358 +#: templates/js/translated/build.js:2360 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:2379 +#: templates/js/translated/build.js:2381 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2485 +#: templates/js/translated/build.js:2487 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421 +#: templates/js/translated/build.js:2522 templates/js/translated/part.js:1421 #: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686 #: templates/js/translated/stock.js:2388 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2534 +#: templates/js/translated/build.js:2536 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2562 +#: templates/js/translated/build.js:2564 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2655 +#: templates/js/translated/build.js:2600 templates/js/translated/stock.js:2655 msgid "No user information" msgstr "没有用户信息" -#: templates/js/translated/build.js:2704 +#: templates/js/translated/build.js:2706 msgid "No parts allocated for" msgstr "" @@ -8660,32 +8654,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1274 templates/modals.html:19 +#: templates/js/translated/forms.js:1269 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1707 +#: templates/js/translated/forms.js:1706 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1923 templates/search.html:29 +#: templates/js/translated/forms.js:1922 templates/search.html:29 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2176 +#: templates/js/translated/forms.js:2175 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2642 +#: templates/js/translated/forms.js:2641 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2654 +#: templates/js/translated/forms.js:2653 msgid "Select Columns" msgstr "" diff --git a/InvenTree/order/serializers.py b/InvenTree/order/serializers.py index 6d23e83628..33d4c7f535 100644 --- a/InvenTree/order/serializers.py +++ b/InvenTree/order/serializers.py @@ -531,7 +531,11 @@ class PurchaseOrderLineItemReceiveSerializer(serializers.Serializer): if serial_numbers: try: # Pass the serial numbers through to the parent serializer once validated - data['serials'] = extract_serial_numbers(serial_numbers, pack_quantity, base_part.getLatestSerialNumberInt()) + data['serials'] = extract_serial_numbers( + serial_numbers, + pack_quantity, + base_part.get_latest_serial_number() + ) except DjangoValidationError as e: raise ValidationError({ 'serial_numbers': e.messages, @@ -1256,7 +1260,11 @@ class SalesOrderSerialAllocationSerializer(serializers.Serializer): part = line_item.part try: - data['serials'] = extract_serial_numbers(serial_numbers, quantity, part.getLatestSerialNumberInt()) + data['serials'] = extract_serial_numbers( + serial_numbers, + quantity, + part.get_latest_serial_number() + ) except DjangoValidationError as e: raise ValidationError({ 'serial_numbers': e.messages, diff --git a/InvenTree/order/tasks.py b/InvenTree/order/tasks.py index 103fc3cc46..0de2b033ed 100644 --- a/InvenTree/order/tasks.py +++ b/InvenTree/order/tasks.py @@ -6,9 +6,9 @@ from django.utils.translation import gettext_lazy as _ import common.notifications import InvenTree.helpers -import InvenTree.tasks import order.models from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus +from InvenTree.tasks import ScheduledTask, scheduled_task from plugin.events import trigger_event @@ -55,6 +55,7 @@ def notify_overdue_purchase_order(po: order.models.PurchaseOrder): ) +@scheduled_task(ScheduledTask.DAILY) def check_overdue_purchase_orders(): """Check if any outstanding PurchaseOrders have just become overdue: @@ -117,6 +118,7 @@ def notify_overdue_sales_order(so: order.models.SalesOrder): ) +@scheduled_task(ScheduledTask.DAILY) def check_overdue_sales_orders(): """Check if any outstanding SalesOrders have just become overdue diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index 59fba9b2c8..6633758b43 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -25,8 +25,8 @@ from company.models import Company, ManufacturerPart, SupplierPart from InvenTree.api import (APIDownloadMixin, AttachmentMixin, ListCreateDestroyAPIView) from InvenTree.filters import InvenTreeOrderingFilter -from InvenTree.helpers import (DownloadFile, increment, isNull, str2bool, - str2int) +from InvenTree.helpers import (DownloadFile, increment_serial_number, isNull, + str2bool, str2int) from InvenTree.mixins import (CreateAPI, ListAPI, ListCreateAPI, RetrieveAPI, RetrieveUpdateAPI, RetrieveUpdateDestroyAPI, UpdateAPI) @@ -717,16 +717,16 @@ class PartSerialNumberDetail(RetrieveAPI): part = self.get_object() # Calculate the "latest" serial number - latest = part.getLatestSerialNumber() + latest = part.get_latest_serial_number() data = { 'latest': latest, } if latest is not None: - next_serial = increment(latest) + next_serial = increment_serial_number(latest) - if next_serial != increment: + if next_serial != latest: data['next'] = next_serial return Response(data) diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index 5ab60edbd5..0c1177ea6a 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -529,112 +529,126 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): return result - def checkIfSerialNumberExists(self, sn, exclude_self=False): - """Check if a serial number exists for this Part. + def validate_serial_number(self, serial: str, stock_item=None, check_duplicates=True, raise_error=False): + """Validate a serial number against this Part instance. - Note: Serial numbers must be unique across an entire Part "tree", so here we filter by the entire tree. + Note: This function is exposed to any Validation plugins, and thus can be customized. + + Any plugins which implement the 'validate_serial_number' method have three possible outcomes: + + - Decide the serial is objectionable and raise a django.core.exceptions.ValidationError + - Decide the serial is acceptable, and return None to proceed to other tests + - Decide the serial is acceptable, and return True to skip any further tests + + Arguments: + serial: The proposed serial number + stock_item: (optional) A StockItem instance which has this serial number assigned (e.g. testing for duplicates) + raise_error: If False, and ValidationError(s) will be handled + + Returns: + True if serial number is 'valid' else False + + Raises: + ValidationError if serial number is invalid and raise_error = True """ - parts = Part.objects.filter(tree_id=self.tree_id) - stock = StockModels.StockItem.objects.filter(part__in=parts, serial=sn) + serial = str(serial).strip() - if exclude_self: - stock = stock.exclude(pk=self.pk) + # First, throw the serial number against each of the loaded validation plugins + from plugin.registry import registry - return stock.exists() + try: + for plugin in registry.with_mixin('validation'): + # Run the serial number through each custom validator + # If the plugin returns 'True' we will skip any subsequent validation + if plugin.validate_serial_number(serial): + return True + except ValidationError as exc: + if raise_error: + # Re-throw the error + raise exc + else: + return False - def find_conflicting_serial_numbers(self, serials): + """ + If we are here, none of the loaded plugins (if any) threw an error or exited early + + Now, we run the "default" serial number validation routine, + which checks that the serial number is not duplicated + """ + + if not check_duplicates: + return + + from part.models import Part + from stock.models import StockItem + + if common.models.InvenTreeSetting.get_setting('SERIAL_NUMBER_GLOBALLY_UNIQUE', False): + # Serial number must be unique across *all* parts + parts = Part.objects.all() + else: + # Serial number must only be unique across this part "tree" + parts = Part.objects.filter(tree_id=self.tree_id) + + stock = StockItem.objects.filter(part__in=parts, serial=serial) + + if stock_item: + # Exclude existing StockItem from query + stock = stock.exclude(pk=stock_item.pk) + + if stock.exists(): + if raise_error: + raise ValidationError(_("Stock item with this serial number already exists") + ": " + serial) + else: + return False + else: + # This serial number is perfectly valid + return True + + def find_conflicting_serial_numbers(self, serials: list): """For a provided list of serials, return a list of those which are conflicting.""" + conflicts = [] for serial in serials: - if self.checkIfSerialNumberExists(serial, exclude_self=True): + if not self.validate_serial_number(serial): conflicts.append(serial) return conflicts - def getLatestSerialNumber(self): - """Return the "latest" serial number for this Part. + def get_latest_serial_number(self): + """Find the 'latest' serial number for this Part. - If *all* the serial numbers are integers, then this will return the highest one. - Otherwise, it will simply return the serial number most recently added. + Here we attempt to find the "highest" serial number which exists for this Part. + There are a number of edge cases where this method can fail, + but this is accepted to keep database performance at a reasonable level. Note: Serial numbers must be unique across an entire Part "tree", so we filter by the entire tree. - """ - parts = Part.objects.filter(tree_id=self.tree_id) - stock = StockModels.StockItem.objects.filter(part__in=parts).exclude(serial=None) - # There are no matchin StockItem objects (skip further tests) + Returns: + The latest serial number specified for this part, or None + """ + + stock = StockModels.StockItem.objects.all().exclude(serial=None).exclude(serial='') + + # Generate a query for any stock items for this part variant tree with non-empty serial numbers + if common.models.InvenTreeSetting.get_setting('SERIAL_NUMBER_GLOBALLY_UNIQUE', False): + # Serial numbers are unique across all parts + pass + else: + # Serial numbers are unique acros part trees + stock = stock.filter(part__tree_id=self.tree_id) + + # There are no matching StockItem objects (skip further tests) if not stock.exists(): return None - # Attempt to coerce the returned serial numbers to integers - # If *any* are not integers, fail! - try: - ordered = sorted(stock.all(), reverse=True, key=lambda n: int(n.serial)) + # Sort in descending order + stock = stock.order_by('-serial_int', '-serial', '-pk') - if len(ordered) > 0: - return ordered[0].serial - - # One or more of the serial numbers was non-numeric - # In this case, the "best" we can do is return the most recent - except ValueError: - return stock.last().serial - - # No serial numbers found - return None - - def getLatestSerialNumberInt(self): - """Return the "latest" serial number for this Part as a integer. - - If it is not an integer the result is 0 - """ - latest = self.getLatestSerialNumber() - - # No serial number = > 0 - if latest is None: - latest = 0 - - # Attempt to turn into an integer and return - try: - latest = int(latest) - return latest - except Exception: - # not an integer so 0 - return 0 - - def getSerialNumberString(self, quantity=1): - """Return a formatted string representing the next available serial numbers, given a certain quantity of items.""" - latest = self.getLatestSerialNumber() - - quantity = int(quantity) - - # No serial numbers can be found, assume 1 as the first serial - if latest is None: - latest = 0 - - # Attempt to turn into an integer - try: - latest = int(latest) - except Exception: - pass - - if type(latest) is int: - - if quantity >= 2: - text = '{n} - {m}'.format(n=latest + 1, m=latest + 1 + quantity) - - return _('Next available serial numbers are') + ' ' + text - else: - text = str(latest + 1) - - return _('Next available serial number is') + ' ' + text - - else: - # Non-integer values, no option but to return latest - - return _('Most recent serial number is') + ' ' + str(latest) + # Return the first serial value + return stock[0].serial @property def full_name(self): diff --git a/InvenTree/part/templates/part/detail.html b/InvenTree/part/templates/part/detail.html index ade3fd4632..4f9c4edd12 100644 --- a/InvenTree/part/templates/part/detail.html +++ b/InvenTree/part/templates/part/detail.html @@ -277,7 +277,7 @@ {% if roles.part.change %} - {% endif %} @@ -286,12 +286,6 @@
{% include "part/bom.html" with part=part %} - {% if roles.part.change %} - -
- {% endif %}
@@ -618,19 +612,7 @@ }); $("[id^=bom-item-new]").click(function () { - - var fields = bomItemFields(); - - fields.part.value = {{ part.pk }}; - fields.sub_part.filters = { - active: true, - }; - - constructForm('{% url "api-bom-list" %}', { - fields: fields, - method: 'POST', - title: '{% trans "Create BOM Item" %}', - focus: 'sub_part', + addBomItem({{ part.pk }}, { onSuccess: function() { $('#bom-table').bootstrapTable('refresh'); } diff --git a/InvenTree/part/templates/part/part_base.html b/InvenTree/part/templates/part/part_base.html index aef2183740..8749292c7e 100644 --- a/InvenTree/part/templates/part/part_base.html +++ b/InvenTree/part/templates/part/part_base.html @@ -323,12 +323,13 @@ {% endif %} - {% if part.trackable and part.getLatestSerialNumber %} + {% with part.get_latest_serial_number as sn %} + {% if part.trackable and sn %} {% trans "Latest Serial Number" %} - {{ part.getLatestSerialNumber }} + {{ sn }}
@@ -337,6 +338,7 @@ {% endif %} + {% endwith %} {% if part.default_location %} diff --git a/InvenTree/plugin/api.py b/InvenTree/plugin/api.py index ea171e2770..d507a2f3a2 100644 --- a/InvenTree/plugin/api.py +++ b/InvenTree/plugin/api.py @@ -16,6 +16,7 @@ from plugin.base.action.api import ActionPluginView from plugin.base.barcodes.api import barcode_api_urls from plugin.base.locate.api import LocatePluginView from plugin.models import PluginConfig, PluginSetting +from plugin.plugin import InvenTreePlugin from plugin.registry import registry @@ -146,6 +147,38 @@ class PluginSettingList(ListAPI): ] +def check_plugin(plugin_slug: str) -> InvenTreePlugin: + """Check that a plugin for the provided slug exsists and get the config. + + Args: + plugin_slug (str): Slug for plugin. + + Raises: + NotFound: If plugin is not installed + NotFound: If plugin is not correctly registered + NotFound: If plugin is not active + + Returns: + InvenTreePlugin: The config object for the provided plugin. + """ + # Check that the 'plugin' specified is valid! + if not PluginConfig.objects.filter(key=plugin_slug).exists(): + raise NotFound(detail=f"Plugin '{plugin_slug}' not installed") + + # Get the list of settings available for the specified plugin + plugin = registry.get_plugin(plugin_slug) + + if plugin is None: + # This only occurs if the plugin mechanism broke + raise NotFound(detail=f"Plugin '{plugin_slug}' not found") # pragma: no cover + + # Check that the plugin is activated + if not plugin.is_active(): + raise NotFound(detail=f"Plugin '{plugin_slug}' is not active") + + return plugin + + class PluginSettingDetail(RetrieveUpdateAPI): """Detail endpoint for a plugin-specific setting. @@ -164,18 +197,10 @@ class PluginSettingDetail(RetrieveUpdateAPI): plugin_slug = self.kwargs['plugin'] key = self.kwargs['key'] - # Check that the 'plugin' specified is valid! - if not PluginConfig.objects.filter(key=plugin_slug).exists(): - raise NotFound(detail=f"Plugin '{plugin_slug}' not installed") + # Look up plugin + plugin = check_plugin(plugin_slug) - # Get the list of settings available for the specified plugin - plugin = registry.get_plugin(plugin_slug) - - if plugin is None: - # This only occurs if the plugin mechanism broke - raise NotFound(detail=f"Plugin '{plugin_slug}' not found") # pragma: no cover - - settings = getattr(plugin, 'SETTINGS', {}) + settings = getattr(plugin, 'settings', {}) if key not in settings: raise NotFound(detail=f"Plugin '{plugin_slug}' has no setting matching '{key}'") diff --git a/InvenTree/plugin/base/barcodes/api.py b/InvenTree/plugin/base/barcodes/api.py index 21a35a754a..15aeaa62fe 100644 --- a/InvenTree/plugin/base/barcodes/api.py +++ b/InvenTree/plugin/base/barcodes/api.py @@ -5,7 +5,7 @@ from django.urls import path, re_path from django.utils.translation import gettext_lazy as _ from rest_framework import permissions -from rest_framework.exceptions import ValidationError +from rest_framework.exceptions import PermissionDenied, ValidationError from rest_framework.response import Response from rest_framework.views import APIView @@ -13,6 +13,7 @@ from InvenTree.helpers import hash_barcode from plugin import registry from plugin.builtin.barcodes.inventree_barcode import ( InvenTreeExternalBarcodePlugin, InvenTreeInternalBarcodePlugin) +from users.models import RuleSet class BarcodeScan(APIView): @@ -139,6 +140,17 @@ class BarcodeAssign(APIView): try: instance = model.objects.get(pk=data[label]) + # Check that the user has the required permission + app_label = model._meta.app_label + model_name = model._meta.model_name + + table = f"{app_label}_{model_name}" + + if not RuleSet.check_table_permission(request.user, table, "change"): + raise PermissionDenied({ + "error": f"You do not have the required permissions for {table}" + }) + instance.assign_barcode( barcode_data=barcode_data, barcode_hash=barcode_hash, @@ -210,6 +222,17 @@ class BarcodeUnassign(APIView): label: _('No match found for provided value') }) + # Check that the user has the required permission + app_label = model._meta.app_label + model_name = model._meta.model_name + + table = f"{app_label}_{model_name}" + + if not RuleSet.check_table_permission(request.user, table, "change"): + raise PermissionDenied({ + "error": f"You do not have the required permissions for {table}" + }) + # Unassign the barcode data from the model instance instance.unassign_barcode() diff --git a/InvenTree/plugin/base/barcodes/test_barcode.py b/InvenTree/plugin/base/barcodes/test_barcode.py index c847d0f586..d3ca79bf4a 100644 --- a/InvenTree/plugin/base/barcodes/test_barcode.py +++ b/InvenTree/plugin/base/barcodes/test_barcode.py @@ -190,6 +190,8 @@ class BarcodeAPITest(InvenTreeAPITestCase): """Test that a barcode can be associated with a StockItem.""" item = StockItem.objects.get(pk=522) + self.assignRole('stock.change') + self.assertEqual(len(item.barcode_hash), 0) barcode_data = 'A-TEST-BARCODE-STRING' diff --git a/InvenTree/plugin/base/integration/mixins.py b/InvenTree/plugin/base/integration/mixins.py index 6a18216209..c5f6b68933 100644 --- a/InvenTree/plugin/base/integration/mixins.py +++ b/InvenTree/plugin/base/integration/mixins.py @@ -214,6 +214,139 @@ class ScheduleMixin: logger.warning("unregister_tasks failed, database not ready") +class ValidationMixin: + """Mixin class that allows custom validation for various parts of InvenTree + + Custom generation and validation functionality can be provided for: + + - Part names + - Part IPN (internal part number) values + - Serial numbers + - Batch codes + + Notes: + - Multiple ValidationMixin plugins can be used simultaneously + - The stub methods provided here generally return None (null value). + - The "first" plugin to return a non-null value for a particular method "wins" + - In the case of "validation" functions, all loaded plugins are checked until an exception is thrown + + Implementing plugins may override any of the following methods which are of interest. + + For 'validation' methods, there are three 'acceptable' outcomes: + - The method determines that the value is 'invalid' and raises a django.core.exceptions.ValidationError + - The method passes and returns None (the code then moves on to the next plugin) + - The method passes and returns True (and no subsequent plugins are checked) + + """ + + class MixinMeta: + """Metaclass for this mixin""" + MIXIN_NAME = "Validation" + + def __init__(self): + """Register the mixin""" + super().__init__() + self.add_mixin('validation', True, __class__) + + def validate_part_name(self, name: str): + """Perform validation on a proposed Part name + + Arguments: + name: The proposed part name + + Returns: + None or True + + Raises: + ValidationError if the proposed name is objectionable + """ + return None + + def validate_part_ipn(self, ipn: str): + """Perform validation on a proposed Part IPN (internal part number) + + Arguments: + ipn: The proposed part IPN + + Returns: + None or True + + Raises: + ValidationError if the proposed IPN is objectionable + """ + return None + + def validate_batch_code(self, batch_code: str): + """Validate the supplied batch code + + Arguments: + batch_code: The proposed batch code (string) + + Returns: + None or True + + Raises: + ValidationError if the proposed batch code is objectionable + """ + return None + + def generate_batch_code(self): + """Generate a new batch code + + Returns: + A new batch code (string) or None + """ + return None + + def validate_serial_number(self, serial: str): + """Validate the supplied serial number + + Arguments: + serial: The proposed serial number (string) + + Returns: + None or True + + Raises: + ValidationError if the proposed serial is objectionable + """ + return None + + def convert_serial_to_int(self, serial: str): + """Convert a serial number (string) into an integer representation. + + This integer value is used for efficient sorting based on serial numbers. + + A plugin which implements this method can either return: + + - An integer based on the serial string, according to some algorithm + - A fixed value, such that serial number sorting reverts to the string representation + - None (null value) to let any other plugins perform the converrsion + + Note that there is no requirement for the returned integer value to be unique. + + Arguments: + serial: Serial value (string) + + Returns: + integer representation of the serial number, or None + """ + return None + + def increment_serial_number(self, serial: str): + """Return the next sequential serial based on the provided value. + + A plugin which implements this method can either return: + + - A string which represents the "next" serial number in the sequence + - None (null value) if the next value could not be determined + + Arguments: + serial: Current serial value (string) + """ + return None + + class UrlsMixin: """Mixin that enables custom URLs for the plugin.""" diff --git a/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py b/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py index 1230794625..6f2439de23 100644 --- a/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py +++ b/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py @@ -125,6 +125,19 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase): self.assertIn('Missing data:', str(response.data)) + # Permission error check + response = self.assign( + { + 'barcode': 'abcdefg', + 'part': 1, + 'stockitem': 1, + }, + expected_code=403 + ) + + self.assignRole('part.change') + self.assignRole('stock.change') + # Provide too many fields response = self.assign( { @@ -188,6 +201,8 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase): barcode = 'xyz-123' + self.assignRole('part.change') + # Test that an initial scan yields no results response = self.scan( { @@ -196,6 +211,8 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase): expected_code=400 ) + self.assignRole('part.change') + # Attempt to assign to an invalid part ID response = self.assign( { @@ -247,6 +264,8 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase): self.assertIn('Barcode matches existing item', str(response.data['error'])) + self.assignRole('part.change') + # Now test that we can unassign the barcode data also response = self.unassign( { @@ -265,6 +284,17 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase): barcode = '555555555555555555555555' + # Assign random barcode data to a StockLocation instance + response = self.assign( + data={ + 'barcode': barcode, + 'stocklocation': 1, + }, + expected_code=403, + ) + + self.assignRole('stock_location.change') + # Assign random barcode data to a StockLocation instance response = self.assign( data={ diff --git a/InvenTree/plugin/mixins/__init__.py b/InvenTree/plugin/mixins/__init__.py index 207a65ab42..df4b9dcb0f 100644 --- a/InvenTree/plugin/mixins/__init__.py +++ b/InvenTree/plugin/mixins/__init__.py @@ -8,7 +8,8 @@ from ..base.barcodes.mixins import BarcodeMixin from ..base.event.mixins import EventMixin from ..base.integration.mixins import (APICallMixin, AppMixin, NavigationMixin, PanelMixin, ScheduleMixin, - SettingsMixin, UrlsMixin) + SettingsMixin, UrlsMixin, + ValidationMixin) from ..base.label.mixins import LabelPrintingMixin from ..base.locate.mixins import LocateMixin @@ -25,6 +26,7 @@ __all__ = [ 'ActionMixin', 'BarcodeMixin', 'LocateMixin', + 'ValidationMixin', 'SingleNotificationMethod', 'BulkNotificationMethod', ] diff --git a/InvenTree/plugin/registry.py b/InvenTree/plugin/registry.py index 9b0e8e29c0..bc832fa128 100644 --- a/InvenTree/plugin/registry.py +++ b/InvenTree/plugin/registry.py @@ -19,6 +19,7 @@ from django.contrib import admin from django.db.utils import IntegrityError, OperationalError, ProgrammingError from django.urls import clear_url_caches, include, re_path from django.utils.text import slugify +from django.utils.translation import gettext_lazy as _ from maintenance_mode.core import (get_maintenance_mode, maintenance_mode_on, set_maintenance_mode) @@ -67,6 +68,21 @@ class PluginsRegistry: return self.plugins[slug] + def set_plugin_state(self, slug, state): + """Set the state(active/inactive) of a plugin. + + Args: + slug (str): Plugin slug + state (bool): Plugin state - true = active, false = inactive + """ + if slug not in self.plugins_full: + logger.warning(f"Plugin registry has no record of plugin '{slug}'") + return + + plugin = self.plugins_full[slug].db + plugin.active = state + plugin.save() + def call_plugin_function(self, slug, func, *args, **kwargs): """Call a member function (named by 'func') of the plugin named by 'slug'. @@ -349,6 +365,8 @@ class PluginsRegistry: Raises: error: IntegrationPluginError """ + # Imports need to be in this level to prevent early db model imports + from InvenTree import version from plugin.models import PluginConfig def safe_reference(plugin, key: str, active: bool = True): @@ -372,7 +390,7 @@ class PluginsRegistry: plg_key = slugify(plg.SLUG if getattr(plg, 'SLUG', None) else plg_name) # keys are slugs! try: - plg_db, _ = PluginConfig.objects.get_or_create(key=plg_key, name=plg_name) + plg_db, _created = PluginConfig.objects.get_or_create(key=plg_key, name=plg_name) except (OperationalError, ProgrammingError) as error: # Exception if the database has not been migrated yet - check if test are running - raise if not if not settings.PLUGIN_TESTING: @@ -380,6 +398,7 @@ class PluginsRegistry: plg_db = None except (IntegrityError) as error: # pragma: no cover logger.error(f"Error initializing plugin `{plg_name}`: {error}") + handle_error(error, log_name='init') # Append reference to plugin plg.db = plg_db @@ -406,7 +425,16 @@ class PluginsRegistry: # Run version check for plugin if (plg_i.MIN_VERSION or plg_i.MAX_VERSION) and not plg_i.check_version(): + # Disable plugin safe_reference(plugin=plg_i, key=plg_key, active=False) + + _msg = _(f'Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!') + if plg_i.MIN_VERSION: + _msg += _(f'Plugin requires at least version {plg_i.MIN_VERSION}') + if plg_i.MAX_VERSION: + _msg += _(f'Plugin requires at most version {plg_i.MAX_VERSION}') + # Log to error stack + log_error(_msg, reference='init') else: safe_reference(plugin=plg_i, key=plg_key) else: # pragma: no cover @@ -467,7 +495,7 @@ class PluginsRegistry: if settings.PLUGIN_TESTING or InvenTreeSetting.get_setting('ENABLE_PLUGINS_SCHEDULE'): - for _, plugin in plugins: + for _key, plugin in plugins: if plugin.mixin_enabled('schedule'): config = plugin.plugin_config() @@ -522,7 +550,7 @@ class PluginsRegistry: apps_changed = False # add them to the INSTALLED_APPS - for _, plugin in plugins: + for _key, plugin in plugins: if plugin.mixin_enabled('app'): plugin_path = self._get_plugin_path(plugin) if plugin_path not in settings.INSTALLED_APPS: diff --git a/InvenTree/plugin/samples/integration/validation_sample.py b/InvenTree/plugin/samples/integration/validation_sample.py new file mode 100644 index 0000000000..aac6b0cd8e --- /dev/null +++ b/InvenTree/plugin/samples/integration/validation_sample.py @@ -0,0 +1,79 @@ +"""Sample plugin which demonstrates custom validation functionality""" + +from datetime import datetime + +from django.core.exceptions import ValidationError + +from plugin import InvenTreePlugin +from plugin.mixins import SettingsMixin, ValidationMixin + + +class CustomValidationMixin(SettingsMixin, ValidationMixin, InvenTreePlugin): + """A sample plugin class for demonstrating custom validation functions""" + + NAME = "CustomValidator" + SLUG = "validator" + TITLE = "Custom Validator Plugin" + DESCRIPTION = "A sample plugin for demonstrating custom validation functionality" + VERSION = "0.1" + + SETTINGS = { + 'ILLEGAL_PART_CHARS': { + 'name': 'Illegal Part Characters', + 'description': 'Characters which are not allowed to appear in Part names', + 'default': '!@#$%^&*()~`' + }, + 'IPN_MUST_CONTAIN_Q': { + 'name': 'IPN Q Requirement', + 'description': 'Part IPN field must contain the character Q', + 'default': False, + 'validator': bool, + }, + 'SERIAL_MUST_BE_PALINDROME': { + 'name': 'Palindromic Serials', + 'description': 'Serial numbers must be palindromic', + 'default': False, + 'validator': bool, + }, + 'BATCH_CODE_PREFIX': { + 'name': 'Batch prefix', + 'description': 'Required prefix for batch code', + 'default': '', + } + } + + def validate_part_name(self, name: str): + """Validate part name""" + + illegal_chars = self.get_setting('ILLEGAL_PART_CHARS') + + for c in illegal_chars: + if c in name: + raise ValidationError(f"Illegal character in part name: '{c}'") + + def validate_part_ipn(self, ipn: str): + """Validate part IPN""" + + if self.get_setting('IPN_MUST_CONTAIN_Q') and 'Q' not in ipn: + raise ValidationError("IPN must contain 'Q'") + + def validate_serial_number(self, serial: str): + """Validate serial number for a given StockItem""" + + if self.get_setting('SERIAL_MUST_BE_PALINDROME'): + if serial != serial[::-1]: + raise ValidationError("Serial must be a palindrome") + + def validate_batch_code(self, batch_code: str): + """Ensure that a particular batch code meets specification""" + + prefix = self.get_setting('BATCH_CODE_PREFIX') + + if not batch_code.startswith(prefix): + raise ValidationError(f"Batch code must start with '{prefix}'") + + def generate_batch_code(self): + """Generate a new batch code.""" + + now = datetime.now() + return f"BATCH-{now.year}:{now.month}:{now.day}" diff --git a/InvenTree/plugin/test_api.py b/InvenTree/plugin/test_api.py index 53e5a67e2c..192b5514e8 100644 --- a/InvenTree/plugin/test_api.py +++ b/InvenTree/plugin/test_api.py @@ -2,10 +2,10 @@ from django.urls import reverse -from InvenTree.api_tester import InvenTreeAPITestCase +from InvenTree.api_tester import InvenTreeAPITestCase, PluginMixin -class PluginDetailAPITest(InvenTreeAPITestCase): +class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): """Tests the plugin API endpoints.""" roles = [ @@ -72,26 +72,14 @@ class PluginDetailAPITest(InvenTreeAPITestCase): def test_admin_action(self): """Test the PluginConfig action commands.""" - from plugin import registry - from plugin.models import PluginConfig - url = reverse('admin:plugin_pluginconfig_changelist') - fixtures = PluginConfig.objects.all() - # check if plugins were registered -> in some test setups the startup has no db access - print(f'[PLUGIN-TEST] currently {len(fixtures)} plugin entries found') - if not fixtures: - registry.reload_plugins() - fixtures = PluginConfig.objects.all() - print(f'Reloaded plugins - now {len(fixtures)} entries found') - - print([str(a) for a in fixtures]) - fixtures = fixtures[0:1] + test_plg = self.plugin_confs.first() # deactivate plugin response = self.client.post(url, { 'action': 'plugin_deactivate', 'index': 0, - '_selected_action': [f.pk for f in fixtures], + '_selected_action': [test_plg.pk], }, follow=True) self.assertEqual(response.status_code, 200) @@ -99,7 +87,7 @@ class PluginDetailAPITest(InvenTreeAPITestCase): response = self.client.post(url, { 'action': 'plugin_deactivate', 'index': 0, - '_selected_action': [f.pk for f in fixtures], + '_selected_action': [test_plg.pk], }, follow=True) self.assertEqual(response.status_code, 200) @@ -107,47 +95,27 @@ class PluginDetailAPITest(InvenTreeAPITestCase): response = self.client.post(url, { 'action': 'plugin_activate', 'index': 0, - '_selected_action': [f.pk for f in fixtures], + '_selected_action': [test_plg.pk], }, follow=True) self.assertEqual(response.status_code, 200) - # activate everything - fixtures = PluginConfig.objects.all() - response = self.client.post(url, { - 'action': 'plugin_activate', - 'index': 0, - '_selected_action': [f.pk for f in fixtures], - }, follow=True) - self.assertEqual(response.status_code, 200) - - fixtures = PluginConfig.objects.filter(active=True) # save to deactivate a plugin - response = self.client.post(reverse('admin:plugin_pluginconfig_change', args=(fixtures.first().pk, )), { + response = self.client.post(reverse('admin:plugin_pluginconfig_change', args=(test_plg.pk, )), { '_save': 'Save', }, follow=True) self.assertEqual(response.status_code, 200) def test_model(self): """Test the PluginConfig model.""" - from plugin import registry - from plugin.models import PluginConfig - - fixtures = PluginConfig.objects.all() - - # check if plugins were registered - if not fixtures: - registry.reload_plugins() - fixtures = PluginConfig.objects.all() - # check mixin registry - plg = fixtures.first() + plg = self.plugin_confs.first() mixin_dict = plg.mixins() self.assertIn('base', mixin_dict) self.assertDictContainsSubset({'base': {'key': 'base', 'human_name': 'base'}}, mixin_dict) # check reload on save with self.assertWarns(Warning) as cm: - plg_inactive = fixtures.filter(active=False).first() + plg_inactive = self.plugin_confs.filter(active=False).first() plg_inactive.active = True plg_inactive.save() self.assertEqual(cm.warning.args[0], 'A reload was triggered') diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 7ecf3ee480..287b76ce8d 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -563,23 +563,35 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView): # If serial numbers are specified, check that they match! try: - serials = extract_serial_numbers(serial_numbers, quantity, part.getLatestSerialNumberInt()) + serials = extract_serial_numbers( + serial_numbers, + quantity, + part.get_latest_serial_number() + ) - # Determine if any of the specified serial numbers already exist! - existing = [] + # Determine if any of the specified serial numbers are invalid + # Note "invalid" means either they already exist, or do not pass custom rules + invalid = [] + errors = [] for serial in serials: - if part.checkIfSerialNumberExists(serial): - existing.append(serial) + try: + part.validate_serial_number(serial, raise_error=True) + except DjangoValidationError as exc: + # Catch raised error to extract specific error information + invalid.append(serial) - if len(existing) > 0: + if exc.message not in errors: + errors.append(exc.message) - msg = _("The following serial numbers already exist") + if len(errors) > 0: + + msg = _("The following serial numbers already exist or are invalid") msg += " : " - msg += ",".join([str(e) for e in existing]) + msg += ",".join([str(e) for e in invalid]) raise ValidationError({ - 'serial_numbers': [msg], + 'serial_numbers': errors + [msg] }) except DjangoValidationError as e: diff --git a/InvenTree/stock/fixtures/stock.yaml b/InvenTree/stock/fixtures/stock.yaml index 103d224f8d..00d1b1ef4f 100644 --- a/InvenTree/stock/fixtures/stock.yaml +++ b/InvenTree/stock/fixtures/stock.yaml @@ -96,6 +96,7 @@ location: 7 quantity: 1 serial: 1000 + serial_int: 1000 level: 0 tree_id: 0 lft: 0 @@ -121,6 +122,7 @@ location: 7 quantity: 1 serial: 1 + serial_int: 1 level: 0 tree_id: 0 lft: 0 @@ -133,6 +135,7 @@ location: 7 quantity: 1 serial: 2 + serial_int: 2 level: 0 tree_id: 0 lft: 0 @@ -145,6 +148,7 @@ location: 7 quantity: 1 serial: 3 + serial_int: 3 level: 0 tree_id: 0 lft: 0 @@ -157,6 +161,7 @@ location: 7 quantity: 1 serial: 4 + serial_int: 4 level: 0 tree_id: 0 lft: 0 @@ -169,6 +174,7 @@ location: 7 quantity: 1 serial: 5 + serial_int: 5 level: 0 tree_id: 0 lft: 0 @@ -181,6 +187,7 @@ location: 7 quantity: 1 serial: 10 + serial_int: 10 level: 0 tree_id: 0 lft: 0 @@ -193,6 +200,7 @@ location: 7 quantity: 1 serial: 11 + serial_int: 11 level: 0 tree_id: 0 lft: 0 @@ -205,6 +213,7 @@ location: 7 quantity: 1 serial: 12 + serial_int: 12 level: 0 tree_id: 0 lft: 0 @@ -217,6 +226,7 @@ location: 7 quantity: 1 serial: 20 + serial_int: 20 level: 0 tree_id: 0 lft: 0 @@ -231,6 +241,7 @@ location: 7 quantity: 1 serial: 21 + serial_int: 21 level: 0 tree_id: 0 lft: 0 @@ -245,6 +256,7 @@ location: 7 quantity: 1 serial: 22 + serial_int: 22 level: 0 tree_id: 0 lft: 0 diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index dc26556f0f..cb8c80995a 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -180,9 +180,24 @@ class StockItemManager(TreeManager): def generate_batch_code(): """Generate a default 'batch code' for a new StockItem. - This uses the value of the 'STOCK_BATCH_CODE_TEMPLATE' setting (if configured), + By default, this uses the value of the 'STOCK_BATCH_CODE_TEMPLATE' setting (if configured), which can be passed through a simple template. + + Also, this function is exposed to the ValidationMixin plugin class, + allowing custom plugins to be used to generate new batch code values """ + + # First, check if any plugins can generate batch codes + from plugin.registry import registry + + for plugin in registry.with_mixin('validation'): + batch = plugin.generate_batch_code() + + if batch is not None: + # Return the first non-null value generated by a plugin + return batch + + # If we get to this point, no plugin was able to generate a new batch code batch_template = common.models.InvenTreeSetting.get_setting('STOCK_BATCH_CODE_TEMPLATE', '') now = datetime.now() @@ -260,15 +275,38 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): This is used for efficient numerical sorting """ - serial = getattr(self, 'serial', '') + + serial = str(getattr(self, 'serial', '')).strip() + + from plugin.registry import registry + + # First, let any plugins convert this serial number to an integer value + # If a non-null value is returned (by any plugin) we will use that + + serial_int = None + + for plugin in registry.with_mixin('validation'): + serial_int = plugin.convert_serial_to_int(serial) + + if serial_int is not None: + # Save the first returned result + # Ensure that it is clipped within a range allowed in the database schema + clip = 0x7fffffff + + serial_int = abs(serial_int) + + if serial_int > clip: + serial_int = clip + + self.serial_int = serial_int + return + + # If we get to this point, none of the available plugins provided an integer value # Default value if we cannot convert to an integer serial_int = 0 - if serial is not None: - - serial = str(serial).strip() - + if serial not in [None, '']: serial_int = extract_int(serial) self.serial_int = serial_int @@ -408,16 +446,32 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): # If the serial number is set, make sure it is not a duplicate if self.serial: - # Query to look for duplicate serial numbers - parts = PartModels.Part.objects.filter(tree_id=self.part.tree_id) - stock = StockItem.objects.filter(part__in=parts, serial=self.serial) - # Exclude myself from the search - if self.pk is not None: - stock = stock.exclude(pk=self.pk) + self.serial = str(self.serial).strip() - if stock.exists(): - raise ValidationError({"serial": _("StockItem with this serial number already exists")}) + try: + self.part.validate_serial_number(self.serial, self, raise_error=True) + except ValidationError as exc: + raise ValidationError({ + 'serial': exc.message, + }) + + def validate_batch_code(self): + """Ensure that the batch code is valid for this StockItem. + + - Validation is performed by custom plugins. + - By default, no validation checks are performed + """ + + from plugin.registry import registry + + for plugin in registry.with_mixin('validation'): + try: + plugin.validate_batch_code(self.batch) + except ValidationError as exc: + raise ValidationError({ + 'batch': exc.message + }) def clean(self): """Validate the StockItem object (separate to field validation). @@ -438,6 +492,8 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): if type(self.batch) is str: self.batch = self.batch.strip() + self.validate_batch_code() + try: # Trackable parts must have integer values for quantity field! if self.part.trackable: diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index 2ab079a5ac..7a0697aa7a 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -342,7 +342,11 @@ class SerializeStockItemSerializer(serializers.Serializer): serial_numbers = data['serial_numbers'] try: - serials = InvenTree.helpers.extract_serial_numbers(serial_numbers, quantity, item.part.getLatestSerialNumberInt()) + serials = InvenTree.helpers.extract_serial_numbers( + serial_numbers, + quantity, + item.part.get_latest_serial_number() + ) except DjangoValidationError as e: raise ValidationError({ 'serial_numbers': e.messages, @@ -371,7 +375,7 @@ class SerializeStockItemSerializer(serializers.Serializer): serials = InvenTree.helpers.extract_serial_numbers( data['serial_numbers'], data['quantity'], - item.part.getLatestSerialNumberInt() + item.part.get_latest_serial_number() ) item.serializeStock( diff --git a/InvenTree/stock/test_api.py b/InvenTree/stock/test_api.py index b3e94e3b92..17e96ca7c6 100644 --- a/InvenTree/stock/test_api.py +++ b/InvenTree/stock/test_api.py @@ -495,7 +495,7 @@ class StockItemTest(StockAPITestCase): # Check that each serial number was created for i in range(1, 11): - self.assertTrue(i in sn) + self.assertTrue(str(i) in sn) # Check the unique stock item has been created diff --git a/InvenTree/stock/tests.py b/InvenTree/stock/tests.py index cf0773b246..ddfc625ca9 100644 --- a/InvenTree/stock/tests.py +++ b/InvenTree/stock/tests.py @@ -4,8 +4,10 @@ import datetime from django.core.exceptions import ValidationError from django.db.models import Sum +from django.test import override_settings from build.models import Build +from common.models import InvenTreeSetting from InvenTree.helpers import InvenTreeTestCase from InvenTree.status_codes import StockHistoryCode from part.models import Part @@ -140,7 +142,7 @@ class StockTest(StockTestBase): item.save() item.full_clean() - # Check that valid URLs pass + # Check that valid URLs pass - and check custon schemes for good_url in [ 'https://test.com', 'https://digikey.com/datasheets?file=1010101010101.bin', @@ -163,6 +165,47 @@ class StockTest(StockTestBase): item.link = long_url item.save() + @override_settings(EXTRA_URL_SCHEMES=['ssh']) + def test_exteneded_schema(self): + """Test that extended URL schemes are allowed""" + item = StockItem.objects.get(pk=1) + item.link = 'ssh://user:pwd@deb.org:223' + item.save() + item.full_clean() + + def test_serial_numbers(self): + """Test serial number uniqueness""" + + # Ensure that 'global uniqueness' setting is enabled + InvenTreeSetting.set_setting('SERIAL_NUMBER_GLOBALLY_UNIQUE', True, self.user) + + part_a = Part.objects.create(name='A', description='A', trackable=True) + part_b = Part.objects.create(name='B', description='B', trackable=True) + + # Create a StockItem for part_a + StockItem.objects.create( + part=part_a, + quantity=1, + serial='ABCDE', + ) + + # Create a StockItem for part_a (but, will error due to identical serial) + with self.assertRaises(ValidationError): + StockItem.objects.create( + part=part_b, + quantity=1, + serial='ABCDE', + ) + + # Now, allow serial numbers to be duplicated between different parts + InvenTreeSetting.set_setting('SERIAL_NUMBER_GLOBALLY_UNIQUE', False, self.user) + + StockItem.objects.create( + part=part_b, + quantity=1, + serial='ABCDE', + ) + def test_expiry(self): """Test expiry date functionality for StockItem model.""" today = datetime.datetime.now().date() @@ -848,22 +891,21 @@ class VariantTest(StockTestBase): def test_serial_numbers(self): """Test serial number functionality for variant / template parts.""" + + InvenTreeSetting.set_setting('SERIAL_NUMBER_GLOBALLY_UNIQUE', False, self.user) + chair = Part.objects.get(pk=10000) # Operations on the top-level object - self.assertTrue(chair.checkIfSerialNumberExists(1)) - self.assertTrue(chair.checkIfSerialNumberExists(2)) - self.assertTrue(chair.checkIfSerialNumberExists(3)) - self.assertTrue(chair.checkIfSerialNumberExists(4)) - self.assertTrue(chair.checkIfSerialNumberExists(5)) + [self.assertFalse(chair.validate_serial_number(i)) for i in [1, 2, 3, 4, 5, 20, 21, 22]] - self.assertTrue(chair.checkIfSerialNumberExists(20)) - self.assertTrue(chair.checkIfSerialNumberExists(21)) - self.assertTrue(chair.checkIfSerialNumberExists(22)) + self.assertFalse(chair.validate_serial_number(20)) + self.assertFalse(chair.validate_serial_number(21)) + self.assertFalse(chair.validate_serial_number(22)) - self.assertFalse(chair.checkIfSerialNumberExists(30)) + self.assertTrue(chair.validate_serial_number(30)) - self.assertEqual(chair.getLatestSerialNumber(), '22') + self.assertEqual(chair.get_latest_serial_number(), '22') # Check for conflicting serial numbers to_check = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] @@ -874,10 +916,10 @@ class VariantTest(StockTestBase): # Same operations on a sub-item variant = Part.objects.get(pk=10003) - self.assertEqual(variant.getLatestSerialNumber(), '22') + self.assertEqual(variant.get_latest_serial_number(), '22') # Create a new serial number - n = variant.getLatestSerialNumber() + n = variant.get_latest_serial_number() item = StockItem( part=variant, @@ -889,12 +931,6 @@ class VariantTest(StockTestBase): with self.assertRaises(ValidationError): item.save() - # Verify items with a non-numeric serial don't offer a next serial. - item.serial = "string" - item.save() - - self.assertEqual(variant.getLatestSerialNumber(), "string") - # This should pass, although not strictly an int field now. item.serial = int(n) + 1 item.save() @@ -906,7 +942,7 @@ class VariantTest(StockTestBase): with self.assertRaises(ValidationError): item.save() - item.serial += 1 + item.serial = int(n) + 2 item.save() diff --git a/InvenTree/templates/InvenTree/settings/global.html b/InvenTree/templates/InvenTree/settings/global.html index f6812bdc34..32dee05241 100644 --- a/InvenTree/templates/InvenTree/settings/global.html +++ b/InvenTree/templates/InvenTree/settings/global.html @@ -23,6 +23,7 @@ {% include "InvenTree/settings/setting.html" with key="INVENTREE_DOWNLOAD_IMAGE_MAX_SIZE" icon="fa-server" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_REQUIRE_CONFIRM" icon="fa-check" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_TREE_DEPTH" icon="fa-sitemap" %} + {% include "InvenTree/settings/setting.html" with key="INVENTREE_BACKUP_ENABLE" icon="fa-hdd" %} diff --git a/InvenTree/templates/InvenTree/settings/stock.html b/InvenTree/templates/InvenTree/settings/stock.html index e897b13ea7..2f6c92c7d4 100644 --- a/InvenTree/templates/InvenTree/settings/stock.html +++ b/InvenTree/templates/InvenTree/settings/stock.html @@ -11,6 +11,7 @@ + {% include "InvenTree/settings/setting.html" with key="SERIAL_NUMBER_GLOBALLY_UNIQUE" icon="fa-hashtag" %} {% include "InvenTree/settings/setting.html" with key="STOCK_BATCH_CODE_TEMPLATE" icon="fa-layer-group" %} {% include "InvenTree/settings/setting.html" with key="STOCK_ENABLE_EXPIRY" icon="fa-stopwatch" %} {% include "InvenTree/settings/setting.html" with key="STOCK_STALE_DAYS" icon="fa-calendar" %} diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index ece5973f0f..5380afae64 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -15,6 +15,7 @@ */ /* exported + addBomItem, constructBomUploadTable, deleteBomItems, downloadBomTemplate, @@ -28,6 +29,30 @@ */ +/* + * Launch a dialog to add a new BOM line item to a Bill of Materials + */ +function addBomItem(part_id, options={}) { + + var fields = bomItemFields(); + + fields.part.value = part_id; + fields.sub_part.filters = { + active: true, + }; + + constructForm('{% url "api-bom-list" %}', { + fields: fields, + method: 'POST', + title: '{% trans "Create BOM Item" %}', + focus: 'sub_part', + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + /* Construct a table of data extracted from a BOM file. * This data is used to import a BOM interactively. */ @@ -1171,6 +1196,13 @@ function loadBomTable(table, options={}) { `/part/${row.part}/bom/` ); } + }, + footerFormatter: function(data) { + return ` + + `; } }); } @@ -1297,6 +1329,15 @@ function loadBomTable(table, options={}) { // In editing mode, attached editables to the appropriate table elements if (options.editable) { + // Callback for "new bom item" button in footer + table.on('click', '#bom-item-new-footer', function() { + addBomItem(options.parent_id, { + onSuccess: function() { + table.bootstrapTable('refresh'); + } + }); + }); + // Callback for "delete" button table.on('click', '.bom-delete-button', function() { diff --git a/InvenTree/templates/js/translated/build.js b/InvenTree/templates/js/translated/build.js index 1e3eb85aa2..fa1ec5bab4 100644 --- a/InvenTree/templates/js/translated/build.js +++ b/InvenTree/templates/js/translated/build.js @@ -1231,6 +1231,8 @@ function loadBuildOutputTable(build_info, options={}) { text += ` ({% trans "Batch" %}: ${row.batch})`; } + text += stockStatusDisplay(row.status, {classes: 'float-right'}); + return renderLink(text, url); }, sorter: function(a, b, row_a, row_b) { diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index da9e2b0686..2fb97be235 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -1230,12 +1230,7 @@ function handleNestedErrors(errors, field_name, options={}) { // Find the target (nested) field var target = `${field_name}_${sub_field_name}_${nest_id}`; - for (var ii = errors.length-1; ii >= 0; ii--) { - - var error_text = errors[ii]; - - addFieldErrorMessage(target, error_text, ii, options); - } + addFieldErrorMessage(target, errors, options); } } } @@ -1312,13 +1307,7 @@ function handleFormErrors(errors, fields={}, options={}) { first_error_field = field_name; } - // Add an entry for each returned error message - for (var ii = field_errors.length-1; ii >= 0; ii--) { - - var error_text = field_errors[ii]; - - addFieldErrorMessage(field_name, error_text, ii, options); - } + addFieldErrorMessage(field_name, field_errors, options); } } @@ -1341,6 +1330,16 @@ function handleFormErrors(errors, fields={}, options={}) { */ function addFieldErrorMessage(name, error_text, error_idx=0, options={}) { + // Handle a 'list' of error message recursively + if (typeof(error_text) == 'object') { + // Iterate backwards through the list + for (var ii = error_text.length - 1; ii >= 0; ii--) { + addFieldErrorMessage(name, error_text[ii], ii, options); + } + + return; + } + field_name = getFieldName(name, options); var field_dom = null; diff --git a/Procfile b/Procfile new file mode 100644 index 0000000000..d1a313b067 --- /dev/null +++ b/Procfile @@ -0,0 +1,2 @@ +web: env/bin/gunicorn --chdir $APP_HOME/InvenTree -c InvenTree/gunicorn.conf.py InvenTree.wsgi -b 0.0.0.0:$PORT +worker: env/bin/python InvenTree/manage.py qcluster diff --git a/README.md b/README.md index a0ca4e75e2..a37c887b52 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,11 @@ There are several options to deploy InvenTree. Bare Metal +Single line install: +```bash +curl https://raw.githubusercontent.com/InvenTree/InvenTree/master/contrib/install.sh | sh +``` + ## :wave: Contributing diff --git a/contrib/install.sh b/contrib/install.sh new file mode 100755 index 0000000000..ef222dee74 --- /dev/null +++ b/contrib/install.sh @@ -0,0 +1,54 @@ +get_distribution() { + lsb_dist="" + # Every system that we officially support has /etc/os-release + if [ -r /etc/os-release ]; then + lsb_dist="$(. /etc/os-release && echo "$ID")" + fi + # Returning an empty string here should be alright since the + # case statements don't act unless you provide an actual value + echo "$lsb_dist" +} + +get_distribution +case "$lsb_dist" in +ubuntu) + if command_exists lsb_release; then + dist_version="$(lsb_release -r | cut -f2)" + fi + if [ -z "$dist_version" ] && [ -r /etc/lsb-release ]; then + dist_version="$(. /etc/lsb-release && echo "$DISTRIB_RELEASE")" + fi + ;; +debian | raspbian) + dist_version="$(sed 's/\/.*//' /etc/debian_version | sed 's/\..*//')" + lsb_dist="debian" + ;; +centos | rhel | sles) + if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then + dist_version="$(. /etc/os-release && echo "$VERSION_ID")" + fi + ;; +*) + if command_exists lsb_release; then + dist_version="$(lsb_release --release | cut -f2)" + fi + if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then + dist_version="$(. /etc/os-release && echo "$VERSION_ID")" + fi + ;; +esac +echo "### ${lsb_dist} ${dist_version} detected" + +# Make sure the depencies are there +sudo apt-get install wget apt-transport-https -y + +echo "### Add key and package source" +# Add key +wget -qO- https://dl.packager.io/srv/matmair/InvenTree/key | sudo apt-key add - +# Add packagelist +sudo wget -O /etc/apt/sources.list.d/inventree.list https://dl.packager.io/srv/matmair/InvenTree/deploy-test/installer/${lsb_dist}/${dist_version}.repo + +echo "### Install InvenTree" +# Update repos and install inventree +sudo apt-get update +sudo apt-get install inventree -y diff --git a/contrib/packager.io/functions.sh b/contrib/packager.io/functions.sh new file mode 100755 index 0000000000..ab52da37af --- /dev/null +++ b/contrib/packager.io/functions.sh @@ -0,0 +1,294 @@ +#!/bin/bash +# +# packager.io postinstall script functions +# + +function detect_docker() { + if [ -n "$(grep docker /dev/null)" ]; then + INIT_CMD="systemctl" + elif [ -n "$(which initctl 2>/dev/null)" ]; then + INIT_CMD="initctl" + else + function sysvinit() { + service $2 $1 + } + INIT_CMD="sysvinit" + fi + + if [ "${DOCKER}" == "yes" ]; then + INIT_CMD="initctl" + fi +} + +function detect_ip() { + # Get the IP address of the server + + if [ "${SETUP_NO_CALLS}" == "true" ]; then + # Use local IP address + echo "# Getting the IP address of the first local IP address" + export INVENTREE_IP=$(hostname -I | awk '{print $1}') + else + # Use web service to get the IP address + echo "# Getting the IP address of the server via web service" + export INVENTREE_IP=$(curl -s https://checkip.amazonaws.com) + fi + + echo "IP address is ${INVENTREE_IP}" +} + +function get_env() { + envname=$1 + + pid=$$ + while [ -z "${!envname}" -a $pid != 1 ]; do + ppid=`ps -oppid -p$pid|tail -1|awk '{print $1}'` + env=`strings /proc/$ppid/environ` + export $envname=`echo "$env"|awk -F= '$1 == "'$envname'" { print $2; }'` + pid=$ppid + done + + if [ -n "${SETUP_DEBUG}" ]; then + echo "Done getting env $envname: ${!envname}" + fi +} + +function detect_local_env() { + # Get all possible envs for the install + + if [ -n "${SETUP_DEBUG}" ]; then + echo "# Printing local envs - before #++#" + printenv + fi + + for i in ${SETUP_ENVS//,/ } + do + get_env $i + done + + if [ -n "${SETUP_DEBUG}" ]; then + echo "# Printing local envs - after #++#" + printenv + fi +} + +function detect_envs() { + # Detect all envs that should be passed to setup commands + + echo "# Setting base environment variables" + + export INVENTREE_CONFIG_FILE=${CONF_DIR}/config.yaml + + if test -f "${INVENTREE_CONFIG_FILE}"; then + echo "# Using existing config file: ${INVENTREE_CONFIG_FILE}" + + # Install parser + pip install jc -q + + # Load config + local conf=$(cat ${INVENTREE_CONFIG_FILE} | jc --yaml) + + # Parse the config file + export INVENTREE_MEDIA_ROOT=$conf | jq '.[].media_root' + export INVENTREE_STATIC_ROOT=$conf | jq '.[].static_root' + export INVENTREE_BACKUP_DIR=$conf | jq '.[].backup_dir' + export INVENTREE_PLUGINS_ENABLED=$conf | jq '.[].plugins_enabled' + export INVENTREE_PLUGIN_FILE=$conf | jq '.[].plugin_file' + export INVENTREE_SECRET_KEY_FILE=$conf | jq '.[].secret_key_file' + + export INVENTREE_DB_ENGINE=$conf | jq '.[].database.ENGINE' + export INVENTREE_DB_NAME=$conf | jq '.[].database.NAME' + export INVENTREE_DB_USER=$conf | jq '.[].database.USER' + export INVENTREE_DB_PASSWORD=$conf | jq '.[].database.PASSWORD' + export INVENTREE_DB_HOST=$conf | jq '.[].database.HOST' + export INVENTREE_DB_PORT=$conf | jq '.[].database.PORT' + else + echo "# No config file found: ${INVENTREE_CONFIG_FILE}, using envs or defaults" + + if [ -n "${SETUP_DEBUG}" ]; then + echo "# Print current envs" + printenv | grep INVENTREE_ + printenv | grep SETUP_ + fi + + export INVENTREE_MEDIA_ROOT=${INVENTREE_MEDIA_ROOT:-${DATA_DIR}/media} + export INVENTREE_STATIC_ROOT=${DATA_DIR}/static + export INVENTREE_BACKUP_DIR=${DATA_DIR}/backup + export INVENTREE_PLUGINS_ENABLED=true + export INVENTREE_PLUGIN_FILE=${CONF_DIR}/plugins.txt + export INVENTREE_SECRET_KEY_FILE=${CONF_DIR}/secret_key.txt + + export INVENTREE_DB_ENGINE=${INVENTREE_DB_ENGINE:-sqlite3} + export INVENTREE_DB_NAME=${INVENTREE_DB_NAME:-${DATA_DIR}/database.sqlite3} + export INVENTREE_DB_USER=${INVENTREE_DB_USER:-sampleuser} + export INVENTREE_DB_PASSWORD=${INVENTREE_DB_PASSWORD:-samplepassword} + export INVENTREE_DB_HOST=${INVENTREE_DB_HOST:-samplehost} + export INVENTREE_DB_PORT=${INVENTREE_DB_PORT:-sampleport} + + export SETUP_CONF_LOADED=true + fi + + # For debugging pass out the envs + echo "# Collected environment variables:" + echo "# INVENTREE_MEDIA_ROOT=${INVENTREE_MEDIA_ROOT}" + echo "# INVENTREE_STATIC_ROOT=${INVENTREE_STATIC_ROOT}" + echo "# INVENTREE_BACKUP_DIR=${INVENTREE_BACKUP_DIR}" + echo "# INVENTREE_PLUGINS_ENABLED=${INVENTREE_PLUGINS_ENABLED}" + echo "# INVENTREE_PLUGIN_FILE=${INVENTREE_PLUGIN_FILE}" + echo "# INVENTREE_SECRET_KEY_FILE=${INVENTREE_SECRET_KEY_FILE}" + echo "# INVENTREE_DB_ENGINE=${INVENTREE_DB_ENGINE}" + echo "# INVENTREE_DB_NAME=${INVENTREE_DB_NAME}" + echo "# INVENTREE_DB_USER=${INVENTREE_DB_USER}" + if [ -n "${SETUP_DEBUG}" ]; then + echo "# INVENTREE_DB_PASSWORD=${INVENTREE_DB_PASSWORD}" + fi + echo "# INVENTREE_DB_HOST=${INVENTREE_DB_HOST}" + echo "# INVENTREE_DB_PORT=${INVENTREE_DB_PORT}" +} + +function create_initscripts() { + + # Make sure python env exsists + if test -f "${APP_HOME}/env"; then + echo "# python enviroment already present - skipping" + else + echo "# Setting up python enviroment" + sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && python3 -m venv env && pip install invoke" + + if [ -n "${SETUP_EXTRA_PIP}" ]; then + echo "# Installing extra pip packages" + if [ -n "${SETUP_DEBUG}" ]; then + echo "# Extra pip packages: ${SETUP_EXTRA_PIP}" + fi + sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && env/bin/pip install ${SETUP_EXTRA_PIP}" + fi + fi + + # Unlink default config if it exists + if test -f "/etc/nginx/sites-enabled/default"; then + echo "# Unlinking default nginx config\n# Old file still in /etc/nginx/sites-available/default" + sudo unlink /etc/nginx/sites-enabled/default + fi + + # Create InvenTree specific nginx config + echo "# Stopping nginx" + ${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} + 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 + echo "# Starting nginx" + ${INIT_CMD} start nginx + + echo "# (Re)creating init scripts" + # This reset scale parameters to a known state + inventree scale web="1" worker="1" + + echo "# Enabling InvenTree on boot" + ${INIT_CMD} enable inventree +} + +function create_admin() { + # Create data for admin user + + if test -f "${SETUP_ADMIN_PASSWORD_FILE}"; then + echo "# Admin data already exists - skipping" + else + echo "# Creating admin user data" + + # Static admin data + export INVENTREE_ADMIN_USER=${INVENTREE_ADMIN_USER:-admin} + export INVENTREE_ADMIN_EMAIL=${INVENTREE_ADMIN_EMAIL:-admin@example.com} + + # Create password if not set + if [ -z "${INVENTREE_ADMIN_PASSWORD}" ]; then + openssl rand -base64 32 >${SETUP_ADMIN_PASSWORD_FILE} + export INVENTREE_ADMIN_PASSWORD=$(cat ${SETUP_ADMIN_PASSWORD_FILE}) + fi + fi +} + +function start_inventree() { + echo "# Starting InvenTree" + ${INIT_CMD} start inventree +} + +function stop_inventree() { + echo "# Stopping InvenTree" + ${INIT_CMD} stop inventree +} + +function update_or_install() { + + # Set permissions so app user can write there + chown ${APP_USER}:${APP_GROUP} ${APP_HOME} -R + + # Run update as app user + echo "# Updating InvenTree" + sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && invoke update | sed -e 's/^/# inv update| /;'" + + # Make sure permissions are correct again + echo "# Set permissions for data dir and media: ${DATA_DIR}" + chown ${APP_USER}:${APP_GROUP} ${DATA_DIR} -R + chown ${APP_USER}:${APP_GROUP} ${CONF_DIR} -R +} + +function set_env() { + echo "# Setting up InvenTree config values" + + inventree config:set INVENTREE_CONFIG_FILE=${INVENTREE_CONFIG_FILE} + + # Changing the config file + echo "# Writing the settings to the config file ${INVENTREE_CONFIG_FILE}" + # Media Root + sed -i s=#media_root:\ \'/home/inventree/data/media\'=media_root:\ \'${INVENTREE_MEDIA_ROOT}\'=g ${INVENTREE_CONFIG_FILE} + # Static Root + sed -i s=#static_root:\ \'/home/inventree/data/static\'=static_root:\ \'${INVENTREE_STATIC_ROOT}\'=g ${INVENTREE_CONFIG_FILE} + # Backup dir + sed -i s=#backup_dir:\ \'/home/inventree/data/backup\'=backup_dir:\ \'${INVENTREE_BACKUP_DIR}\'=g ${INVENTREE_CONFIG_FILE} + # Plugins enabled + sed -i s=plugins_enabled:\ False=plugins_enabled:\ ${INVENTREE_PLUGINS_ENABLED}=g ${INVENTREE_CONFIG_FILE} + # Plugin file + sed -i s=#plugin_file:\ \'/path/to/plugins.txt\'=plugin_file:\ \'${INVENTREE_PLUGIN_FILE}\'=g ${INVENTREE_CONFIG_FILE} + # Secret key file + sed -i s=#secret_key_file:\ \'/etc/inventree/secret_key.txt\'=secret_key_file:\ \'${INVENTREE_SECRET_KEY_FILE}\'=g ${INVENTREE_CONFIG_FILE} + # Debug mode + sed -i s=debug:\ True=debug:\ False=g ${INVENTREE_CONFIG_FILE} + + # Database engine + sed -i s=#ENGINE:\ sampleengine=ENGINE:\ ${INVENTREE_DB_ENGINE}=g ${INVENTREE_CONFIG_FILE} + # Database name + sed -i s=#NAME:\ \'/path/to/database\'=NAME:\ \'${INVENTREE_DB_NAME}\'=g ${INVENTREE_CONFIG_FILE} + # Database user + sed -i s=#USER:\ sampleuser=USER:\ ${INVENTREE_DB_USER}=g ${INVENTREE_CONFIG_FILE} + # Database password + sed -i s=#PASSWORD:\ samplepassword=PASSWORD:\ ${INVENTREE_DB_PASSWORD}=g ${INVENTREE_CONFIG_FILE} + # Database host + sed -i s=#HOST:\ samplehost=HOST:\ ${INVENTREE_DB_HOST}=g ${INVENTREE_CONFIG_FILE} + # Database port + sed -i s=#PORT:\ sampleport=PORT:\ ${INVENTREE_DB_PORT}=g ${INVENTREE_CONFIG_FILE} + + # Fixing the permissions + chown ${APP_USER}:${APP_GROUP} ${DATA_DIR} ${INVENTREE_CONFIG_FILE} +} + +function final_message() { + echo -e "####################################################################################" + echo -e "This InvenTree install uses nginx, the settings for the webserver can be found in" + echo -e "${SETUP_NGINX_FILE}" + echo -e "Try opening InvenTree with either\nhttp://localhost/ or http://${INVENTREE_IP}/\n" + echo -e "Admin user data:" + echo -e " Email: ${INVENTREE_ADMIN_EMAIL}" + echo -e " Username: ${INVENTREE_ADMIN_USER}" + echo -e " Password: ${INVENTREE_ADMIN_PASSWORD}" + echo -e "####################################################################################" +} diff --git a/contrib/packager.io/postinstall.sh b/contrib/packager.io/postinstall.sh new file mode 100755 index 0000000000..62efbc3b94 --- /dev/null +++ b/contrib/packager.io/postinstall.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# +# packager.io postinstall script +# + +exec > >(tee ${APP_HOME}/log/setup_$(date +"%F_%H_%M_%S").log) 2>&1 + +PATH=${APP_HOME}/env/bin:${APP_HOME}/:/sbin:/bin:/usr/sbin:/usr/bin: + +# import functions +. ${APP_HOME}/contrib/packager.io/functions.sh + +# Envs that should be passed to setup commands +export SETUP_ENVS=PATH,APP_HOME,INVENTREE_MEDIA_ROOT,INVENTREE_STATIC_ROOT,INVENTREE_PLUGINS_ENABLED,INVENTREE_PLUGIN_FILE,INVENTREE_CONFIG_FILE,INVENTREE_SECRET_KEY_FILE,INVENTREE_DB_ENGINE,INVENTREE_DB_NAME,INVENTREE_DB_USER,INVENTREE_DB_PASSWORD,INVENTREE_DB_HOST,INVENTREE_DB_PORT,INVENTREE_ADMIN_USER,INVENTREE_ADMIN_EMAIL,INVENTREE_ADMIN_PASSWORD,SETUP_NGINX_FILE,SETUP_ADMIN_PASSWORD_FILE,SETUP_NO_CALLS,SETUP_DEBUG,SETUP_EXTRA_PIP + +# Get the envs +detect_local_env + +# default config +export CONF_DIR=/etc/inventree +export DATA_DIR=${APP_HOME}/data +# Setup variables +export SETUP_NGINX_FILE=${SETUP_NGINX_FILE:-/etc/nginx/sites-enabled/inventree.conf} +export SETUP_ADMIN_PASSWORD_FILE=${CONF_DIR}/admin_password.txt +export SETUP_NO_CALLS=${SETUP_NO_CALLS:-false} +# SETUP_DEBUG can be set to get debug info +# SETUP_EXTRA_PIP can be set to install extra pip packages + +# get base info +detect_envs +detect_docker +detect_initcmd +detect_ip + +# create processes +create_initscripts +create_admin + +# run updates +stop_inventree +update_or_install +# Write config file +if [ "${SETUP_CONF_LOADED}" = "true" ]; then + set_env +fi +start_inventree + +# show info +final_message diff --git a/docker/init.sh b/docker/init.sh index 47f05afeb0..08dbf87117 100644 --- a/docker/init.sh +++ b/docker/init.sh @@ -13,6 +13,11 @@ if [[ ! -d "$INVENTREE_MEDIA_ROOT" ]]; then mkdir -p $INVENTREE_MEDIA_ROOT fi +if [[ ! -d "$INVENTREE_BACKUP_DIR" ]]; then + echo "Creating directory $INVENTREE_BACKUP_DIR" + mkdir -p $INVENTREE_BACKUP_DIR +fi + # Check if "config.yaml" has been copied into the correct location if test -f "$INVENTREE_CONFIG_FILE"; then echo "$INVENTREE_CONFIG_FILE exists - skipping" diff --git a/requirements-dev.txt b/requirements-dev.txt index ff387f7ff0..0fe5d8b257 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -14,9 +14,9 @@ build==0.8.0 \ --hash=sha256:19b0ed489f92ace6947698c3ca8436cb0556a66e2aa2d34cd70e2a5d27cd0437 \ --hash=sha256:887a6d471c901b1a6e6574ebaeeebb45e5269a79d095fe9a8f88d6614ed2e5f0 # via pip-tools -certifi==2022.6.15 \ - --hash=sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d \ - --hash=sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412 +certifi==2022.9.24 \ + --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 \ + --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 # via # -c requirements.txt # requests @@ -24,9 +24,9 @@ cfgv==3.3.1 \ --hash=sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426 \ --hash=sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736 # via pre-commit -charset-normalizer==2.1.0 \ - --hash=sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5 \ - --hash=sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413 +charset-normalizer==2.1.1 \ + --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ + --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f # via # -c requirements.txt # requests @@ -98,9 +98,9 @@ distlib==0.3.5 \ --hash=sha256:a7f75737c70be3b25e2bee06288cec4e4c221de18455b2dd037fe2a795cab2fe \ --hash=sha256:b710088c59f06338ca514800ad795a132da19fda270e3ce4affc74abf955a26c # via virtualenv -django==3.2.15 \ - --hash=sha256:115baf5049d5cf4163e43492cdc7139c306ed6d451e7d3571fe9612903903713 \ - --hash=sha256:f71934b1a822f14a86c9ac9634053689279cd04ae69cb6ade4a59471b886582b +django==3.2.16 \ + --hash=sha256:18ba8efa36b69cfcd4b670d0fa187c6fe7506596f0ababe580e16909bcdec121 \ + --hash=sha256:3adc285124244724a394fa9b9839cc8cd116faf7d159554c43ecdaa8cdf0b94d # via # -c requirements.txt # django-debug-toolbar @@ -134,9 +134,9 @@ identify==2.5.3 \ --hash=sha256:25851c8c1370effb22aaa3c987b30449e9ff0cece408f810ae6ce408fdd20893 \ --hash=sha256:887e7b91a1be152b0d46bbf072130235a8117392b9f1828446079a816a05ef44 # via pre-commit -idna==3.3 \ - --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ - --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via # -c requirements.txt # requests @@ -192,9 +192,9 @@ pyparsing==3.0.9 \ --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc # via packaging -pytz==2022.1 \ - --hash=sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7 \ - --hash=sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c +pytz==2022.4 \ + --hash=sha256:2c0784747071402c6e99f0bafdb7da0fa22645f06554c7ae06bf6358897e9c91 \ + --hash=sha256:48ce799d83b6f8aab2020e369b627446696619e79645419610b9facd909b3174 # via # -c requirements.txt # django @@ -245,9 +245,9 @@ snowballstemmer==2.2.0 \ --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a # via pydocstyle -sqlparse==0.4.2 \ - --hash=sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae \ - --hash=sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d +sqlparse==0.4.3 \ + --hash=sha256:0323c0ec29cd52bceabc1b4d9d579e311f3e4961b98d174201d5622a23b85e34 \ + --hash=sha256:69ca804846bb114d2ec380e4360a8a340db83f0ccf3afceeb1404df028f57268 # via # -c requirements.txt # django @@ -266,9 +266,9 @@ typing-extensions==4.3.0 \ --hash=sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02 \ --hash=sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6 # via django-test-migrations -urllib3==1.26.11 \ - --hash=sha256:c33ccba33c819596124764c23a97d25f32b28433ba0dedeb77d873a38722c9bc \ - --hash=sha256:ea6e8fb210b19d950fab93b60c9009226c63a28808bc8386e05301e25883ac0a +urllib3==1.26.12 \ + --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ + --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 # via # -c requirements.txt # requests diff --git a/requirements.in b/requirements.in index 2b871a6035..677d0b2b24 100644 --- a/requirements.in +++ b/requirements.in @@ -7,6 +7,7 @@ django-allauth-2fa # MFA / 2FA django-cleanup # Automated deletion of old / unused uploaded files django-cors-headers # CORS headers extension for DRF django-crispy-forms # Form helpers +django-dbbackup # Backup / restore of database and media files django-error-report # Error report viewer for the admin interface django-filter # Extended filtering options django-formtools # Form wizard tools diff --git a/requirements.txt b/requirements.txt index 1faaf17eab..a42003aa11 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ # # pip-compile --output-file=requirements.txt requirements.in # -arrow==1.2.2 +arrow==1.2.3 # via django-q asgiref==3.5.2 # via django @@ -16,7 +16,7 @@ blessed==1.19.1 # via django-q brotli==1.0.9 # via fonttools -certifi==2022.6.15 +certifi==2022.9.24 # via # requests # sentry-sdk @@ -24,7 +24,7 @@ cffi==1.15.1 # via # cryptography # weasyprint -charset-normalizer==2.1.0 +charset-normalizer==2.1.1 # via requests coreapi==2.3.3 # via -r requirements.in @@ -34,7 +34,7 @@ cryptography==3.4.8 # via # -r requirements.in # pyjwt -cssselect2==0.6.0 +cssselect2==0.7.0 # via weasyprint defusedxml==0.7.1 # via @@ -42,12 +42,13 @@ defusedxml==0.7.1 # python3-openid diff-match-patch==20200713 # via django-import-export -django==3.2.15 +django==3.2.16 # via # -r requirements.in # django-allauth # django-allauth-2fa # django-cors-headers + # django-dbbackup # django-error-report # django-filter # django-formtools @@ -79,11 +80,13 @@ django-cors-headers==3.13.0 # via -r requirements.in django-crispy-forms==1.14.0 # via -r requirements.in +django-dbbackup==4.0.2 + # via -r requirements.in django-error-report==0.2.0 # via -r requirements.in django-filter==22.1 # via -r requirements.in -django-formtools==2.3 +django-formtools==2.4 # via -r requirements.in django-import-export==2.5.0 # via -r requirements.in @@ -113,23 +116,23 @@ django-stdimage==5.3.0 # via -r requirements.in django-user-sessions==1.7.1 # via -r requirements.in -django-weasyprint==2.1.0 +django-weasyprint==2.2.0 # via -r requirements.in django-xforwardedfor-middleware==2.0 # via -r requirements.in -djangorestframework==3.13.1 +djangorestframework==3.14.0 # via -r requirements.in et-xmlfile==1.1.0 # via openpyxl -fonttools[woff]==4.34.4 +fonttools[woff]==4.37.4 # via weasyprint gunicorn==20.1.0 # via -r requirements.in html5lib==1.1 # via weasyprint -idna==3.3 +idna==3.4 # via requests -importlib-metadata==4.12.0 +importlib-metadata==5.0.0 # via markdown itypes==1.2.0 # via coreapi @@ -141,7 +144,7 @@ markuppy==1.14 # via tablib markupsafe==2.1.1 # via jinja2 -oauthlib==3.2.0 +oauthlib==3.2.1 # via requests-oauthlib odfpy==1.4.1 # via tablib @@ -163,24 +166,25 @@ py-moneyed==1.2 # django-money pycparser==2.21 # via cffi -pydyf==0.2.0 +pydyf==0.5.0 # via weasyprint -pyjwt[crypto]==2.4.0 +pyjwt[crypto]==2.5.0 # via django-allauth -pyphen==0.12.0 +pyphen==0.13.0 # via weasyprint python-barcode[images]==0.14.0 # via -r requirements.in python-dateutil==2.8.2 # via arrow -python-fsutil==0.6.1 +python-fsutil==0.7.0 # via django-maintenance-mode python3-openid==3.2.0 # via django-allauth -pytz==2022.1 +pytz==2022.4 # via # babel # django + # django-dbbackup # djangorestframework pyyaml==6.0 # via tablib @@ -194,7 +198,7 @@ redis==3.5.3 # via # django-q # django-redis -regex==2022.8.17 +regex==2022.9.13 # via -r requirements.in requests==2.28.1 # via @@ -203,7 +207,7 @@ requests==2.28.1 # requests-oauthlib requests-oauthlib==1.3.1 # via django-allauth -sentry-sdk==1.9.0 +sentry-sdk==1.9.10 # via -r requirements.in six==1.16.0 # via @@ -211,7 +215,7 @@ six==1.16.0 # blessed # html5lib # python-dateutil -sqlparse==0.4.2 +sqlparse==0.4.3 # via # django # django-sql-utils @@ -224,9 +228,11 @@ tinycss2==1.1.1 # bleach # cssselect2 # weasyprint +types-cryptography==3.3.23 + # via pyjwt uritemplate==4.1.1 # via coreapi -urllib3==1.26.11 +urllib3==1.26.12 # via # requests # sentry-sdk @@ -246,7 +252,7 @@ xlrd==2.0.1 # via tablib xlwt==1.3.0 # via tablib -zipp==3.8.1 +zipp==3.9.0 # via importlib-metadata zopfli==0.2.1 # via fonttools diff --git a/runtime.txt b/runtime.txt new file mode 100644 index 0000000000..119ff10234 --- /dev/null +++ b/runtime.txt @@ -0,0 +1 @@ +python-3.10.7 diff --git a/tasks.py b/tasks.py index 112370babf..97309a980f 100644 --- a/tasks.py +++ b/tasks.py @@ -196,7 +196,27 @@ def translate(c): manage(c, "compilemessages") -@task(post=[rebuild_models, rebuild_thumbnails]) +@task +def backup(c): + """Backup the database and media files.""" + + print("Backing up InvenTree database...") + manage(c, "dbbackup --noinput --clean --compress") + print("Backing up InvenTree media files...") + manage(c, "mediabackup --noinput --clean --compress") + + +@task +def restore(c): + """Restore the database and media files.""" + + print("Restoring InvenTree database...") + manage(c, "dbrestore --noinput --uncompress") + print("Restoring InvenTree media files...") + manage(c, "mediarestore --noinput --uncompress") + + +@task(pre=[backup, ], post=[rebuild_models, rebuild_thumbnails]) def migrate(c): """Performs database migrations.